在 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
来自手册页:
当在函数中使用时,declare 使每个名称都成为本地名称,与命令一样
local
,除非-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" )