2014-06-23 146 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