我想使用下面的脚本来回显$ 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
我想使用下面的脚本来回显$ 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
的问题是,该壳通常执行单个替换通。您可以用eval
强制第二次传球,但这显然伴随着通常的安全警告(不要评估未经检查的用户输入等)。
eval echo \$ANIMAL$i
Bash有不同的结构,以帮助避免eval
。
可以使用eval
eval echo \$ANIMAL$i
你可能最好使用数组而不是ANIMAL0
和ANIMAL1
。这样的事情可能吗?
#!/bin/bash
animals=("Tiger" "Lion")
for animal in ${animals[*]}
do
printf "Hey, ${animal} \n"
done
使用eval
将让你陷入困境的道路,而不是最好的做法你想要做什么。
谢谢我学到了另一种好方法。 –
那么,如果你最终使用这种方法,请将其标记为正确的答案。除此之外,很高兴帮助:) – Semirix
你可以使用BASH吗? – anubhava