すばらしいマニュアルの「バグ」セクションを読んでください。
<ブロック引用>配列変数は (まだ) エクスポートされていない可能性があります。
ただし、多くの人がこれを実際のバグと考えているかどうかはわかりません。 ksh スタイルの配列をサポートする他のシェルでも、それらをエクスポートすることはできません。
パラメータ、変数、または環境を介して、配列定義を簡単に渡すことができます。ただし、通常はあまり役に立ちません。
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
誤解は、環境変数はシェルによってのみ使用されると考えていることです-実際には使用されていません。読み取り専用、整数、配列などの属性は、環境ブロックにエクスポートできません。環境変数は、C、C++、Perl、Java、Python、PHP などの任意の言語で読み取ることができます。 Windows にも存在します。
では、別の言語で Bash 固有の属性をサポートするにはどうすればよいでしょうか?配列値がまったくエクスポートされない Bash を除いて、すべての環境変数は文字列に変換されます。
Korn シェルは最初の要素だけをエクスポートします。 ksh93 も一部の exec
を実行します Korn シェルの子にエクスポートされた変数属性を保持するための悪用。
ところで、変数名に大文字を使用することは、シェルで使用されるものと衝突する可能性があるため、悪い習慣と見なされています。また、Bash 3 では、エクスポート時に STRING という名前に問題があります (Bash 4 で修正されました)。