【发布时间】:2016-01-14 08:36:55
【问题描述】:
我有以下脚本。
#!/bin/bash
d5=me
d6=you
d7=re
for i in {5..7}
do
echo $"d$i"
done
打印出来
d5
d6
d7
我要打印
我
你
重新
【问题讨论】:
-
为什么不用数组?任何时候你发现自己用这样的顺序名称构造变量时,它可能应该是一个数组。
标签: bash indirection
我有以下脚本。
#!/bin/bash
d5=me
d6=you
d7=re
for i in {5..7}
do
echo $"d$i"
done
打印出来
d5
d6
d7
我要打印
我
你
重新
【问题讨论】:
标签: bash indirection
您可以使用"${!varName}" 来引用存储在varName 变量中的值:
for i in {5..7}; do v="d$i"; echo "${!v}"; done
me
you
re
Check indirect variable expansion in bash
甚至更简单:
for v in d{5..7}; do echo "${!v}"; done
me
you
re
【讨论】:
你也可以使用eval:
for i in {5..7}; do eval echo \$d$i ; done
【讨论】:
eval,但鉴于有一个用于间接变量扩展的专用机制(参见anubhava的回答),为什么会你,考虑到eval 的安全风险?