GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Ein Array kann nicht als Umgebungsvariable verwendet werden

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.


Linux
  1. Einzelne Klammer in der Bash-Variablenzuweisung?

  2. Ersetzung von Umgebungsvariablen in sed

  3. Wie lösche ich eine exportierte Umgebungsvariable?

  4. Wie ändere ich die Sprache meines Git?

  5. Geklonte VM, OpenSUSE, VirtualBox können nicht verwendet werden

So legen Sie die Umgebungsvariable in Windows fest

So legen Sie Umgebungsvariablen in MacOS fest

Konfigurieren Sie die Datenbankverbindung mithilfe der Umgebungsvariablen in Rails

So setzen Sie die Umgebungsvariable in Bash

Die 20 wichtigsten Gründe für die Verwendung der KDE-Desktopumgebung

10 Gründe für die Verwendung von Pantheon als Desktop-Umgebung