関数で宣言されたBash配列は、関数の外では使用できません。

関数で宣言されたBash配列は、関数の外では使用できません。

Bash(v4.3.11) 端末で、次のように入力します。

function FUNCtst() { declare -A astr; astr=([a]="1k" [b]="2k" ); declare -p astr; };FUNCtst;declare -p astr

(以下の内容は読みやすいように同じ)

function FUNCtst() { 
  declare -A astr; 
  astr=([a]="1k" [b]="2k" ); 
  declare -p astr; 
};
FUNCtst;
declare -p astr

これを出力します(関数の外側で配列の値が失われました。なぜですか?)

declare -A astr='([a]="1k" [b]="2k" )'
bash: declare: astr: not found

私はこれが次のように出力されることを期待しています。

declare -A astr='([a]="1k" [b]="2k" )'
declare -A astr='([a]="1k" [b]="2k" )'

どのように機能させるのですか?

ベストアンサー1

~からマニュアルページ:

関数内で使用するときにこのオプションを使用しないlocal限り、宣言は各名前を command などのローカル名にします。-g

例:

FUNCtst() { 
    declare -gA astr
    astr=([a]="1k" [b]="2k" )
    declare -p astr
}
FUNCtst
declare -p astr

印刷

declare -A astr=([a]="1k" [b]="2k" )
declare -A astr=([a]="1k" [b]="2k" )

おすすめ記事