2011-11-27 9 views
15

whileとuntilの実際の違いは何ですか?Bashの "while"と "until"の違い

"until"とwhileループで降順ループを行うことが可能かどうかを知りたいと思います。

私はこの

COUNTER=0 
    while [ $COUNTER -lt 10 ]; do 
     echo The counter is $COUNTER 
     let COUNTER+=1 
    done 

この

COUNTER=20 
    until [ $COUNTER -lt 10 ]; do 
     echo COUNTER $COUNTER 
     let COUNTER-=1 
    done 

をすれば、彼らはうまく機能していることを見たので。

しかし、私は反対のことを行う場合、例えば:

COUNTER=20 
    while [ $COUNTER -lt 10 ]; do 
     echo COUNTER $COUNTER 
     let COUNTER-=1 
    done 

スクリプトが終了していません。

これは、bashのwhileループで逆ループを実行できないということですか?

答えて

29

whileループはで、の条件は真です。 untilは、条件が真(すなわち、、条件が偽)のまでまでループを実行します。

http://www.gnu.org/software/bash/manual/bashref.html#Looping-Constructsを参照してください。

+0

ありがとうございました!今はっきりしています... – Kyrol

+1

あなたは定義で定義している言葉を使わないように言ったことはありますか?:) –

+0

は喜ばしく、 'while'はプレースホルダなので、' wh!13'のような任意の文字セットの任意の組み合わせが可能です; -O – gwillie

4

彼らは反対である:ところで

bool b; 
while(b) = until(!b) 
3

COUNTER=20 
while [ $COUNTER -lt 10 ]; do 
    echo COUNTER $COUNTER 
    let COUNTER-=1 
done 

これは永遠に実行されません。ループ条件の最初の評価中にCounter(20)が10以上であるため、すぐに終了します。

7

ループは、条件がで、条件までなったことを実行し続けると(...を行わないで囲まれた)コードのブロックを実行している間。条件がになると、whileループが終了します。ループまで

は、条件が偽であって、条件までなったことを実行しておくとき(...を行わないで囲まれた)コードのブロックを実行します。条件がになると、untilループは終了します。非常に最初の機会に

COUNTER=20 
while [ $COUNTER -lt 10 ]; do 
    echo COUNTER $COUNTER 
    let COUNTER-=1 
done 

、一方で言及条件、すなわち、偽保持するので、whileループ内のコードのブロックがまったく実行されない[COUNTER -lt 10 $]。

関連する問題