INPUT=10
OUTPUT_IN=20
KEYWORD="IN"
echo $OUTPUT_"$KEYWORD"
它应该显示20
主要是我希望生成变量名OUTPUT_IN
如何解决这个问题?
答案 0 :(得分:4)
你可以在Bash中使用间接,如下所示:
INPUT=10
OUTPUT_IN=20
KEYWORD="IN"
var="OUTPUT_$KEYWORD"
echo "${!var}"
但是,您应该使用数组或其他方法来执行您想要的操作。来自BashFAQ/006:
将变量名或任何其他bash语法放在参数中通常是个坏主意。它违反了代码和数据之间的分离;因此,如果你知道自己“做对了”,因为你“知道并明白你正在做什么”,那么我们所有人都会遇到错误并付出代价。尊重分离实践,以尽量减少它们可能造成的损害程度。
除此之外,它还会使您的代码不明显且不透明。
通常,在bash脚本编写中,根本不需要间接引用。一般来说,当人们不了解或了解Bash Arrays或者没有充分考虑其他Bash功能(例如函数)时,人们会考虑这个解决方案。
如果可能的话,你应该避免使用eval
。来自BashFAQ/048:
如果变量包含shell命令,则shell可能会运行该命令,无论您是否需要它。这可能会导致意外结果,尤其是在可以从不受信任的来源(如用户或用户创建的文件)中读取变量时。
Bash 4有关联数组,允许你这样做:
array[in]=10
array[out]=20
index="out"
echo "${array[$index]}"
答案 1 :(得分:3)
eval newvar=\$$varname