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).