Leggi l'ottimo manuale, sezione "bug".
Le variabili array potrebbero non essere (ancora) esportate.
Tuttavia, non so che molti lo considerino un vero bug. Anche altre shell che supportano gli array in stile ksh non consentono l'esportazione.
Puoi passare le definizioni degli array piuttosto facilmente, attraverso parametri o variabili o l'ambiente. Di solito non è molto utile però.
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
L'equivoco sta nel pensare che le variabili d'ambiente siano usate solo dalle shell - non lo sono. Nessun attributo, inclusi readonly, integer e array, può essere esportato nel blocco dell'ambiente. Le variabili d'ambiente possono essere lette da qualsiasi linguaggio, C, C++, Perl, Java, Python, PHP e così via. Esistono anche su Windows.
Quindi, come potrebbe un'altra lingua supportare attributi specifici di Bash? Tutte le variabili d'ambiente vengono convertite in stringhe, tranne in Bash dove i valori dell'array non vengono affatto esportati.
La shell Korn esporterà solo il primo elemento. ksh93 esegue anche alcuni exec
sfruttamento per preservare gli attributi delle variabili esportati nei figli della shell Korn.
A proposito, è considerato una cattiva pratica usare MAIUSCOLO per i nomi delle variabili, poiché potrebbero entrare in collisione con quelli usati dalla shell. Inoltre, su Bash 3, il nome STRING ha problemi quando viene esportato (risolto in Bash 4).