Ein bash
array kann keine Umgebungsvariable sein, da Umgebungsvariablen nur Schlüssel-Wert-String-Paare sein können.
Sie können es genauso machen wie die Shell mit ihrem $PATH
Variable, die im Wesentlichen ein Array von Pfaden ist; Verwandeln Sie das Array in eine Zeichenfolge, die durch ein bestimmtes Zeichen getrennt ist, das sonst nicht in den Werten des Arrays vorhanden ist:
$ arr=( aa bb cc "some string" )
$ arr=$( printf '%s:' "${arr[@]}" )
$ printf '%s\n' "$arr"
aa:bb:cc:some string:
Oder ordentlicher,
arr=( aa bb cc "some string" )
arr=$( IFS=:; printf '%s' "${arr[*]}" )
export arr
Die Erweiterung von ${arr[*]}
werden die Elemente von arr
sein Array getrennt durch das erste Zeichen von IFS
, hier auf :
gesetzt . Beachten Sie, dass auf diese Weise die Elemente der Zeichenfolge getrennt werden (nicht getrennt ) von :
, was bedeutet, dass Sie ein leeres Element am Ende nicht unterscheiden könnten, wenn es eines gäbe.
Eine Alternative zum Übergeben von Werten an ein Skript mithilfe von Umgebungsvariablen ist (offensichtlich?) die Verwendung der Befehlszeilenargumente:
arr=( aa bb cc )
./some_script "${arr[@]}"
Das Skript würde dann entweder nacheinander auf die übergebenen Argumente zugreifen, indem es die Positionsparameter $1
verwendet , $2
, $3
usw. oder durch die Verwendung von [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
Arrays sind Bash-spezifisch. Umgebungsvariablen sind Name-Wert-Paare.
Lesen Sie die Spezifikationen zu Umgebungsvariablen, in denen zum Teil Folgendes steht:
Der Wert einer Umgebungsvariablen ist eine Zeichenkette. Für ein C-Programm soll ein Array von Strings namens Umgebung verfügbar gemacht werden, wenn ein Prozess beginnt. Auf das Array wird durch die externe Variable environ verwiesen , die wie folgt definiert ist:
extern char **environ;
Diese Zeichenfolgen haben die Form Name=Wert; Namen darf nicht das Zeichen '=' enthalten.