在函数中声明的 Bash 数组在函数外不可用

Aqu*_*wer 2 bash array function

在 bash (v4.3.11) 终端上输入:

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

(下面相同,只是为了更容易在这里阅读)

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

将输出这个(在函数之外,数组会丢失它的值,为什么?)

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

我期待它输出这个:

declare -A astr='([a]="1k" [b]="2k" )'
declare -A astr='([a]="1k" [b]="2k" )'
Run Code Online (Sandbox Code Playgroud)

如何使它工作?

Nyk*_*kin 9

手册页

When used in a function, declare makes each name local, as with the local command, unless the ‘-g’ option is used.
Run Code Online (Sandbox Code Playgroud)

例子:

$ function 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" )'
Run Code Online (Sandbox Code Playgroud)