1つの配列と2つの連想配列があります。コードを維持できるようにしたいので、デフォルトの配列リストを使用して2つの連想配列を繰り返したいと思います。しかし、正しく理解できないようです。
連想配列のキー値を印刷しようとすると、結果は常にゼロです。
以下は私のサンプルコードです。
declare -A list_a list_b
list_a=( [a]=1 [b]=2)
list_b=( [c]=3 [d]=4)
master_list=(list_a list_b)
for thelist in "${master_list[@]}"
do
for key in "${!thelist[@]}"
do
#it show be printing out the keys of the associative array
echo "the key is: $key"
done
done
Output:
the key is: 0
the key is: 0
何が問題なのか知っていますか?
ベストアンサー1
配列間接参照を拡張するには、文字列が変数の[@]
一部である必要があります。次の値で動作します。
for thelist in "${master_list[@]}" ; do
reallist=$thelist[@]
for key in "${!reallist}" ; do
echo "the key is: $key"
done
done
鍵の場合eval
。
for thelist in "${master_list[@]}" ; do
eval keys=('"${!'$thelist'[@]}"')
for key in "${keys[@]}" ; do
echo "the key is: $key"
done
done
master_listに変数名のみが含まれていることを確認する限り、安全でなければなりません。