私は次の設定をしています:
#! /bin/bash
init_globals() {
declare -gA global_arr1=( ["key"]="val" )
}
init_globals
echo "${global_arr1["key"]}" # WORKS! print val
local_arr1=( ["key"]="local val" )
i=1
temp=local_arr$i
current_arr=${!temp}
echo ${current_arr["key"]} # WORKS! print local val
temp=global_arr$i
current_arr=${!temp}
echo ${current_arr["key"]} # DOESN'T WORK! expect val but print nothing...
変数 i に基づいて、グローバルに定義された連想配列にアクセスしようとしています。そのため、間接展開を使用して、current_arr
必要なものに割り当てます。ローカルで定義された連想配列に対しては完全に機能します。ただし、グローバル配列では機能しません。なんでそうなの?