使用变量在shell脚本中创建变量名

时间:2014-06-23 11:02:02

标签: shell

我想使用下面的脚本回显$ ANMIAL0然后$ ANIMAL1。 但是我收到line 7: ${ANIMAL$i}: bad substitution错误消息。怎么了?

#!/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

3 个答案:

答案 0 :(得分:1)

使用数组而不是ANIMAL0ANIMAL1可能会更好。这样的事可能吗?

#!/bin/bash

animals=("Tiger" "Lion")

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

使用eval会让您遇到麻烦,并不是您尝试做的最佳做法。

答案 1 :(得分:0)

您可以使用eval

eval echo \$ANIMAL$i

答案 2 :(得分:0)

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

eval echo \$ANIMAL$i

Bash有各种各样的结构来帮助避免eval