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

bash:Array-Env-Variable setzen und Dereferenzieren von einem beliebigen Shell-Skript schlägt fehl

Lesen Sie das schöne Handbuch, Abschnitt "Bugs".

Array-Variablen dürfen (noch) nicht exportiert werden.

Ich weiß jedoch nicht, dass viele dies für einen tatsächlichen Fehler halten. Andere Shells, die Arrays im ksh-Stil unterstützen, erlauben es ebenfalls nicht, sie zu exportieren.

Sie können Array-Definitionen ziemlich einfach durch Parameter oder Variablen oder die Umgebung herumreichen. Es ist jedoch normalerweise nicht sehr nützlich.

function f {
    unset -v "$2"
    typeset "$2"
    eval "${!1}"
    typeset -p "$2"
}

typeset -a a=(a b c)
myArr=$(typeset -p a) f myArr a

Das Missverständnis besteht darin, zu glauben, dass Umgebungsvariablen nur von Shells verwendet werden - das sind sie nicht. Keine Attribute, einschließlich readonly, integer und Arrays, können in den Umgebungsblock exportiert werden. Umgebungsvariablen können von jeder Sprache gelesen werden, C, C++, Perl, Java, Python, PHP und so weiter. Sie existieren auch unter Windows.

Wie könnte also eine andere Sprache Bash-spezifische Attribute unterstützen? Alle Umgebungsvariablen werden in Strings konvertiert, außer in Bash, wo Array-Werte überhaupt nicht exportiert werden.

Die Korn-Shell exportiert nur das erste Element. ksh93 macht auch einige exec Ausnutzung, um Variablenattribute beizubehalten, die in untergeordnete Korn-Shells exportiert wurden.

Übrigens gilt es als schlechte Praxis, GROSSBUCHSTABEN für Variablennamen zu verwenden, da sie mit denen kollidieren könnten, die von der Shell verwendet werden. Außerdem hat der Name STRING in Bash 3 beim Export Probleme (behoben in Bash 4).


Linux
  1. Unterschied zwischen exportierten und nicht in Bash enthaltenen Shell-Variablen?

  2. Wie erstelle ich ein Array eindeutiger Elemente aus einer Zeichenfolge/einem Array in Bash?

  3. Shell-Skript mit Funktion und Parameter als Variablen?

  4. Kopieren und überschreiben Sie eine Datei im Shell-Skript

  5. Wo wird die PATH-Variable in Ubuntu gesetzt?

Bash Beginner Series #2:Variables in Bash Shell Scripting verstehen

Bash-Variablen-Tutorial – 6 praktische Bash-Beispiele für globale und lokale Variablen

Variablenbereich für Bash-Shell-Skripte und Funktionen im Skript

Exportieren Sie eine Variable aus Bash und verwenden Sie sie in Python

bash - gibt ein Array von der Funktion zurück und zeigt den Inhalt an

bash + liest Variablen und Werte aus der Datei per Bash-Skript