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í [email protected]
:
printf 'First I got "%s"\n' "$1"
printf 'Then I got "%s"\n' "$2"
printf 'Lastly there was "%s"\n' "$3"
for opt in "[email protected]"; 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 '='.