2014-06-23 148 views
0

我想使用下面的脚本来回显$ ANMIAL0和$ ANIMAL1。 但我得到line 7: ${ANIMAL$i}: bad substitution错误消息。怎么了?使用变量在shell脚本中创建变量名称

#!/bin/sh 
ANIMAL0="tiger" 
ANIMAL1="lion" 
i=0 
while test $i -lt 2; do 
echo "Hey $i !" 
echo ${ANIMAL$i} 
i=`expr $i + 1` 
done 
+0

你可以使用BASH吗? – anubhava

回答

0

的问题是,该壳通常执行单个替换通。您可以用eval强制第二次传球,但这显然伴随着通常的安全警告(不要评估未经检查的用户输入等)。

eval echo \$ANIMAL$i 

Bash有不同的结构,以帮助避免eval

0

可以使用eval

eval echo \$ANIMAL$i 
1

你可能最好使用数组而不是ANIMAL0ANIMAL1。这样的事情可能吗?

#!/bin/bash 

animals=("Tiger" "Lion") 

for animal in ${animals[*]} 
do 
    printf "Hey, ${animal} \n" 
done 

使用eval将让你陷入困境的道路,而不是最好的做法你想要做什么。

+0

谢谢我学到了另一种好方法。 –

+0

那么,如果你最终使用这种方法,请将其标记为正确的答案。除此之外,很高兴帮助:) – Semirix