
次の連想配列があります。
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