2011-12-07 18 views
1

私は以下のように小さなループ問題があります。ループ内の単一変数に複数の値を使用する

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

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

は、今私はのように、同じコマンドを実行するために使用されるこれら三つの変数の値を使いたい -

は私が同じスクリプトを実行中に3つの異なる値を使用する必要があります

今私は実行するたびにvar1、var2、var3の値を取る$ varを望みます

誰かが私に上記を達成する方法を教えていただけますか?

私はやってみました -

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

これはevalを使用する方法の良い例です

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

を試してみてください。 1. $ iの値は、シェルが行をスキャンしたときに表示されます。 $ varは\$varのようにエスケープされているため、最初のスキャンでは は表示されません。 2. Evalは、cmd-lineの2回目のスキャンを強制するので、$ var1などが表示され、その値がコマンドラインに代入されて実行されます。

こちらがお役に立てば幸いです。

P.S. StackOverflowへようこそ。私たちが通常ここで行う3つのことを思い出させてください。1)あなたが助けを受けて、それを与えて、あなたの専門分野の質問に答えよう2)FAQを読む、http://tinyurl.com/2vycnvr、3) Q & Aは、灰色の三角形、http://i.imgur.com/kygEP.pngを使用して投票します。システムの信頼性は、ユーザーが知識を共有して得た評判に基づいているためです。また、チェックマーク記号を押すことで、もしあれば、より良いあなたの問題を解決する答えを受け入れることを覚えてhttp://i.imgur.com/uqJeW.png

+0

Aack、あなたが本当に必要でない限り、 '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 
関連する問題