
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
ない限り、declare はコマンドと同様に各名前をローカルにします-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" )