函數中宣告的 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" )

相關內容