Lisez bien le manuel, section "bugs".
Les variables de tableau ne peuvent pas (encore) être exportées.
Cependant, je ne sais pas si beaucoup considèrent cela comme un véritable bug. Les autres shells prenant en charge les tableaux de style ksh ne permettent pas non plus de les exporter.
Vous pouvez passer des définitions de tableau assez facilement, via des paramètres ou des variables ou l'environnement. Cependant, ce n'est généralement pas très utile.
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
Le malentendu est de penser que les variables d'environnement ne sont utilisées que par les shells - elles ne le sont pas. Aucun attribut, y compris en lecture seule, entier et tableaux, ne peut être exporté dans le bloc d'environnement. Les variables d'environnement peuvent être lues par n'importe quel langage, C, C++, Perl, Java, Python, PHP, etc. Ils existent aussi sous Windows.
Alors, comment un autre langage pourrait-il prendre en charge des attributs spécifiques à Bash ? Toutes les variables d'environnement sont converties en chaînes, sauf dans Bash où les valeurs de tableau ne sont pas du tout exportées.
Le shell Korn n'exportera que le premier élément. ksh93 fait aussi du exec
exploitation pour préserver les attributs de variables exportés vers les enfants du shell Korn.
Soit dit en passant, il est considéré comme une mauvaise pratique d'utiliser des MAJUSCULES pour les noms de variables, car ils pourraient entrer en collision avec ceux utilisés par le shell. De plus, sur Bash 3, le nom STRING a des problèmes lors de l'exportation (corrigé dans Bash 4).