Baca panduan halus, bagian "bug".
Variabel array mungkin belum (belum) diekspor.
Padahal, saya tidak tahu banyak yang menganggap ini bug yang sebenarnya. Shell lain yang mendukung array gaya ksh juga tidak mengizinkan untuk mengekspornya.
Anda dapat membagikan definisi array dengan lebih mudah, melalui parameter atau variabel atau lingkungan. Ini biasanya tidak terlalu berguna.
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
Kesalahpahaman adalah dalam berpikir bahwa variabel lingkungan hanya digunakan oleh shell - sebenarnya tidak. Tidak ada atribut, termasuk readonly, integer, dan array, yang dapat diekspor ke blok lingkungan. Variabel lingkungan dapat dibaca oleh bahasa apapun, C, C++, Perl, Java, Python, PHP, dan seterusnya. Mereka juga ada di Windows.
Jadi, bagaimana bahasa lain dapat mendukung atribut khusus Bash? Semua variabel lingkungan dikonversi menjadi string, kecuali di Bash di mana nilai array tidak diekspor sama sekali.
Korn shell hanya akan mengekspor elemen pertama. ksh93 juga melakukan beberapa exec
eksploitasi untuk mempertahankan atribut variabel yang diekspor ke anak Korn shell.
Omong-omong, penggunaan HURUF BESAR untuk nama variabel dianggap praktik yang buruk, karena dapat bertabrakan dengan yang digunakan oleh shell. Selain itu, di Bash 3, nama STRING mengalami masalah saat diekspor (diperbaiki di Bash 4).