我想使用下面的脚本回显$ 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
答案 0 :(得分:1)
使用数组而不是ANIMAL0
和ANIMAL1
可能会更好。这样的事可能吗?
#!/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
。