如何在shell脚本中加入2变量?

时间:2010-07-07 13:07:14

标签: linux bash shell

INPUT=10     
OUTPUT_IN=20     
KEYWORD="IN"    
echo $OUTPUT_"$KEYWORD"   

它应该显示20

主要是我希望生成变量名OUTPUT_IN

如何解决这个问题?

2 个答案:

答案 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

来源:Advanced Bash-Scripting Guide, Indirect References