web-dev-qa-db-ja.com

Bashの「while」と「until」の違い

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を使用して逆ループを実行できないことを意味しますか?

26
Kyrol

whileはループを実行しますwhile条件は真です。 untilはループを実行しますntil条件はtrueです(つまりwhile条件はfalseです)。

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

38

Whileループは、条件がtrueの場合にコードブロック(do ... doneで囲まれています)を実行し、実行を継続します条件がfalseになるまで。条件がfalseになると、whileループが終了します。

ntil Loop条件がfalseの場合にコードブロック(do ... doneで囲まれています)を実行し、実行を継続します条件がtrueになるまで。条件がtrueになると、untilループが終了します。

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

最初の機会に、whileで言及された条件、つまり[$ COUNTER -lt 10]はfalseを保持するため、内部のコードブロックはwhileループはまったく実行されません。

12
Mandar Shinde

彼らは反対です:

bool b;
while(b) = until(!b)
6
Vladp

ところで:

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

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

4
Vilas

基本的に、while&untilループは、初期条件が満たされた場合にのみ実行されますが、whileループは、現在の条件が満たされた場合にのみ機能します。ただし、untilループは条件が満たされるまで待機します。例えば。 5は10未満なので、次のように機能します。ループの本体は、終了するちょうど10になるまで値を増分します。

index=5
until [ $index -gt 10 ]
do
  echo $index
  let index+=1
done

この例は機能しません。5は最初は10より大きくないため、ループ中にのみ大きくなります。

index=5
while [ $index -gt 10 ]
do
  echo $index
  let index+=1
done
0
Remario