![bash 关联数组,其中值是变量,打印每个值的变量名称](https://linux22.com/image/204504/bash%20%E5%85%B3%E8%81%94%E6%95%B0%E7%BB%84%EF%BC%8C%E5%85%B6%E4%B8%AD%E5%80%BC%E6%98%AF%E5%8F%98%E9%87%8F%EF%BC%8C%E6%89%93%E5%8D%B0%E6%AF%8F%E4%B8%AA%E5%80%BC%E7%9A%84%E5%8F%98%E9%87%8F%E5%90%8D%E7%A7%B0.png)
我有以下关联数组。
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