「while」のマイナスバージョンにすぎませんが、「until」ブロックをデザインするのはなぜですか?

「while」のマイナスバージョンにすぎませんが、「until」ブロックをデザインするのはなぜですか?

私が知っているように、untilblockはの反対バージョンです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

このプロセスでは、終了状態の正確な値が失われます。

おすすめ記事