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を使用して逆ループを実行できないことを意味しますか?
while
はループを実行しますwhile条件は真です。 until
はループを実行しますntil条件はtrueです(つまりwhile条件はfalseです)。
http://www.gnu.org/software/bash/manual/bashref.html#Looping-Constructs を参照してください。
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ループはまったく実行されません。
彼らは反対です:
bool b;
while(b) = until(!b)
ところで:
COUNTER=20
while [ $COUNTER -lt 10 ]; do
echo COUNTER $COUNTER
let COUNTER-=1
done
これは永久には実行されません。カウンター(20)は、ループ条件の最初の評価中に10以上であるため、すぐに終了します。
基本的に、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