2011-12-07 55 views
1

我有一個小的循環問題,如下所示。在循環中對單個變量使用多個值

我有運行相同的腳本,同時使用3個不同的價值觀 -

va1="some-value1" 
va2="some-value2" 
va3="some-value3" 

現在我想用這三個變量的值用於運行相同的命令,就像 -

while (i=0,i<=3,i++) 
do 
bin/java -s (run something with $var); 
done 

現在我想是$ var採取VAR1,VAR2和VAR3運行每次的價值,

所以有人告訴我,我們如何實現以上?

我想這樣做 -

for $1 $2 $3 

do 
case 1 
case 2 
case 3 
done 

OR

while read a b c 
do 
<code assumed to have loop iteration> 
done <<< $(command) 

但它不是按預期工作......會很感激您對這個幫助。

感謝, 布賴恩

回答

1

你忘了 '中' 語法的一部分:

for var in $va1 $va2 $va3 
do 
    command $var 
done 
0

嘗試

while ((i=0,i<=3,i++)) 
do 
eval bin/java -s \$var$i 
done 

這是如何使用eval一個很好的例子。請注意1. $ i的值被shell看到,它掃描了該行。然後因爲$ var像\$var一樣被轉義出來,所以在第一次掃描時不是 '可見'。 2. Eval強制執行cmd行的第二次掃描,因此它會看到$ var1或其他內容,並將該值替換到命令行中執行。

我希望這會有所幫助。

P.S.歡迎來到StackOverflow,讓我提醒你我們通常在這裏做的三件事:1)當你得到幫助時,嘗試給予它,回答你的專業領域的問題2)閱讀常見問題,http://tinyurl.com/2vycnvr,3)當你看到好Q & A,使用灰色三角形http://i.imgur.com/kygEP.png對它們進行投票,因爲系統的可信度基於用戶通過分享知識獲得的信譽。還記得接受更好的解決您的問題的答案,如果有的話,按複選標記符號,http://i.imgur.com/uqJeW.png

+0

艾克,除非你真的需要,否則不要使用'eval',因爲它是邪惡的。間接擴張可以做到這一點,而不會冒「eval」可能帶來的問題。 –

+0

絕對值得考慮,如果有任何可能性,用戶插入淘氣代碼進行評估。就我個人而言,我只讀過關於這種情況,但我只加載無聊的數據庫;-)祝大家好運。 – shellter

0

您可以使用間接變量擴展與${!...}

va1="some-value1" 
va2="some-value2" 
va3="some-value3" 
for ((i=1;i<=3;i++)); do 
    varname="va$i" 
    echo "$varname = ${!varname}" 
done 

此打印:

va1 = some-value1 
va2 = some-value2 
va3 = some-value3