我想使用下面的腳本來回顯$ 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