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