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" )