A bash pole nemůže být proměnnou prostředí, protože proměnné prostředí mohou být pouze páry řetězců klíč-hodnota.
Můžete to udělat stejně jako shell se svým $PATH proměnná, což je v podstatě pole cest; přeměňte pole na řetězec, oddělený nějakým konkrétním znakem, který se jinak v hodnotách pole nevyskytuje:
$ arr=( aa bb cc "some string" )
$ arr=$( printf '%s:' "${arr[@]}" )
$ printf '%s\n' "$arr"
aa:bb:cc:some string:
Nebo úhlednější,
arr=( aa bb cc "some string" )
arr=$( IFS=:; printf '%s' "${arr[*]}" )
export arr
Rozšíření ${arr[*]} budou prvky arr pole oddělené prvním znakem IFS , zde nastaveno na : . Všimněte si, že pokud to uděláte tímto způsobem, prvky řetězce budou odděleny (není odděleno ) podle : , což znamená, že byste nebyli schopni rozlišit prázdný prvek na konci, pokud by tam nějaký byl.
Alternativou k předávání hodnot do skriptu pomocí proměnných prostředí je (samozřejmě?) použití argumentů příkazového řádku:
arr=( aa bb cc )
./some_script "${arr[@]}"
Skript by pak přistupoval k předávaným argumentům jeden po druhém pomocí pozičních parametrů $1 , $2 , $3 atd. nebo pomocí example@unixlinux.online :
printf 'First I got "%s"\n' "$1"
printf 'Then I got "%s"\n' "$2"
printf 'Lastly there was "%s"\n' "$3"
for opt in "example@unixlinux.online"; do
printf 'I have "%s"\n' "$opt"
done
Pole jsou specifické pro bash. Proměnné prostředí jsou páry název-hodnota.
Přečtěte si specifikace proměnných prostředí, které částečně říkají:
Hodnota proměnné prostředí je řetězec znaků. Pro program v jazyce C musí být na začátku procesu k dispozici pole řetězců nazývaných prostředí. Na pole ukazuje externí proměnná prostředí , který je definován jako:
extern char **environ;Tyto řetězce mají tvar název=hodnota; jména nesmí obsahovat znak '='.