2017-11-10 7 views
1

このコードは何も失敗しませんが、counter ++を使用すると最初の反復は失敗します。ここでなぜ(カウンタ++)がカウンタ== 0のときに失敗するのですか?

parameters="one two three" 
counter=0 

    for option in $parameters 
    do 
    eval $option=${args[$counter]} 
    ((counter = counter + 1)) # If you do ((counter++)) it fails the first iteration, weird. 
    echo $option $? 
    done 

私が何を意味するかです:

[email protected]:~$ bash -x test.sh 
+ parameters='one two three' 
+ counter=0 
+ for option in '$parameters' 
+ eval one= 
++ one= 
+ ((counter++)) 
+ echo one 1 
one 1 
+ for option in '$parameters' 
+ eval two= 
++ two= 
+ ((counter++)) 
+ echo two 0 
two 0 
+ for option in '$parameters' 
+ eval three= 
++ three= 
+ ((counter++)) 
+ echo three 0 
three 0 
[email protected]:~$ vi test.sh 
[email protected]:~$ bash -x test.sh 
+ parameters='one two three' 
+ counter=0 
+ for option in '$parameters' 
+ eval one= 
++ one= 
+ ((counter=counter+1)) 
+ echo one 0 
one 0 
+ for option in '$parameters' 
+ eval two= 
++ two= 
+ ((counter=counter+1)) 
+ echo two 0 
two 0 
+ for option in '$parameters' 
+ eval three= 
++ three= 
+ ((counter=counter+1)) 
+ echo three 0 
three 0 

私はこの問題を理解するであろう誰に十分にそれを説明すると思うが、私はこれを提出するために、より多くのテキストを追加する必要があるので、私はこれを書いていますライン。

+0

いや、しかし、最初の繰り返しは、あなたが '-e'設定し、私のよう' -o pipefail'を設定してスクリプトを設定した場合、彼らは停止することを意味し、1番出口コードを与えますランニング。それ以外はすべていいです。 – Ulukai

+0

ここに引数リストをループするための多くの悪い習慣があります。 'eval'を使い、for-loopで変数を使う。 – Inian

+0

私は一連のパラメータを繰り返し処理する必要があります。これらのパラメータには、指定された引数から値を割り当てる必要があります。したがって、evalとその繰り返しの特定の順序が必要です。 forループ。私はちょうど具体的な何かの答えを求めていたとして詳細のすべての方法を提供したくなかったが、あなたがこれを行うためのより良い方法を知っているなら、この質問の範囲外であっても、 ) – Ulukai

答えて

関連する問題