【发布时间】:2017-09-26 09:57:30
【问题描述】:
我想做这样的事情
A='123'
B='143'
C='999'
declare -a arr=(A B C)
for i in "{$arr[@]}"
do
echo "@i" "$i"
done
这应该给我
的输出A 123
B 143
C 999
但是我收到的是变量名,而不是输出中的值(我只是在输出中看到“A @i”...
【问题讨论】:
我想做这样的事情
A='123'
B='143'
C='999'
declare -a arr=(A B C)
for i in "{$arr[@]}"
do
echo "@i" "$i"
done
这应该给我
的输出A 123
B 143
C 999
但是我收到的是变量名,而不是输出中的值(我只是在输出中看到“A @i”...
【问题讨论】:
如果您想在循环中存储变量名称,而不是复制它们的值,那么您可以使用以下内容:
for i in "${arr[@]}"; do
echo "${!i}"
done
这意味着i 的值被当作变量名,所以你最终会在循环中回显$A、$B 和$C。
当然,这意味着您可以同时打印变量名,例如通过使用:
echo "$i: ${!i}"
并不完全相同,但您可能也对使用关联数组感兴趣:
declare -A assoc_arr=( [A]='123' [B]='143' [C]='999' )
for key in "${!assoc_arr[@]}"; do
echo "$key: ${assoc_arr[$key]}"
done
【讨论】:
建议加$:
declare -a arr=("$A" "$B" "$C")
【讨论】: