0

私は次の設定をしています:

#! /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必要なものに割り当てます。ローカルで定義された連想配列に対しては完全に機能します。ただし、グローバル配列では機能しません。なんでそうなの?

4

2 に答える 2

1

なぜなら:

local_arr1=( ["key"]="local val" )

実際には連想配列ではありません。次の方法で確認できます。

declare -p local_arr1

これは次を印刷します:

declare -a local_arr1='([0]="local val")'

正しく使用する場合:

declare -A local_arr1=( ["key"]="local val" )

その場合、動作は両方のアレイで同じになります。

于 2016-02-09T17:43:48.057 に答える