値が変数であるbash連想配列、各値の変数名を印刷する

値が変数であるbash連想配列、各値の変数名を印刷する

次の連想配列があります。

var1="dog"
var2="cat"
var3="moose"

declare -A asar01=(
["one"]="$var1"
["two"]="$var2"
["three"]="$var3"
)

各値変数名を繰り返し印刷したいと思います。したがって、「var1」、「var2」、「var3」のみが印刷されます。どうすればいいですか?以下を試しましたが、実際のスクリプト名が印刷されます。最初の変数として出力します。

for i in "${!asar01[@]}";do
    echo "${!asar01[$i]}"
done

私の例では、その${!variable}方法を使用して名前を印刷しようとしましたが、うまくいきません。どうすればいいですか?

ベストアンサー1

あなたは使用しようとしています間接拡張戻る。変数名を保持するには、$連想配列の割り当てから削除します。

#!/bin/bash

var1="dog"
var2="cat"
var3="moose"

declare -A asar01=(
["one"]="var1"
["two"]="var2"
["three"]="var3"
)

for i in "${!asar01[@]}"; do
   printf 'Key is: %s\n' "$i"
   printf 'Var name is: %s\n' "${asar01[$i]}"
   printf 'Var value is: %s\n' "${!asar01[$i]}"
done

おすすめ記事