私が知っているように、until
blockはの反対バージョンですwhile
。
likeuntil "condition A is met"
はと同じですwhile "condition A is not met"
。
python
たとえば、いくつかの現代言語ではwhile
。
それでは、著者はなぜ同時にbourne shell
デザインをuntil
しましたかwhile
?
while
交換できない状況がありますかuntil
?
答え1
この構文が派生したBourneシェルには、コマンド否定()演算子はありません!
。したがって、次のことif
ができる場所については大きな問題にはなりません。
if cmd; then
: no-op
else
something if cmd returns false
fi
while
次のような醜い作業を行う必要がある場所に関する質問がたくさんあります。
while cmd; [ "$?" -ne 0 ]; do
...
done
これがより良いようです:
until cmd; do
...
done
ksh
(およびそれを採用したPOSIX(およびbash / zsh ...))を使用すると、sh
次のことができます。
if ! cmd; then
something if cmd fails
fi
while ! cmd; do
...
done
このプロセスでは、終了状態の正確な値が失われます。
答え2
常に少なくとも1回の繰り返しを実行するまで。条件Aが満たされる状況を考える。
While A is not met:
run X
Xを実行しません。しかし:
do
run X
until A is met
Xを一度実行した後、Aが満足しているかどうかを評価し、次のステップに進みます。