函数中声明的 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

来自手册页:

当在函数中使用时,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" )

相关内容