インターネットで検索したところ、Bashにはdo-whileループがないようです。
これは正しいです?これを確認するための信頼できる情報源はありますか(do-whileループがあるという証拠の欠如は、ループがないという議論ではありません、おそらくステートメントはunpopular)だけですか?
ディレクティブを自分で定義して、do-whileループを実装することは可能ですか? do-while-ループをwhile-ループしますが、これはnotこの質問の範囲です。
bash
(または一般にPosixシェル)には、構文が冗長になるため、テスト後のループ(一般に「do-while」ループとして知られています)の明示的な構文がありません。 while
複合ステートメントを使用すると、テスト前、テスト後、またはテスト中のループをすべて同じ構文で記述できます。
シェルwhile
ループのセマンティクスは次のとおりです Posix :
Whileループの形式は次のとおりです。
while compound-list-1
do
compound-list-2
done
複合リスト-1が実行され、終了ステータスがゼロ以外の場合、whileコマンドが完了します。それ以外の場合は、compound-list-2が実行され、プロセスが繰り返されます。
「化合物リスト」は一連のコマンドです。複合リストの終了ステータスは、リスト内の最後のコマンドの終了ステータスです。
つまり、while
ループは次のように記述されていると考えることができます。
while
optional-pre-test-compound-list
condition
do
post-test-compound-list
done
つまり、テストする条件がwhileキーワードの直後に続く必要はありません。したがって、C構文と同等です。
do statements while (test);
です
while statements; test do :; done
シェル文法では空のステートメントが許可されていないため、doとdoneの間の:
が必要です。 :
はメタ文字ではないため、前後に空白またはメタ文字が必要です。それ以外の場合は、先行または後続のトークンの一部として解析されます。コマンドとして解析されるため、その後にセミコロンまたは改行も必要です。それ以外の場合、done
は:
への引数として扱われます。
いいえ、bashにはdo-while
ループがありません。 手動 セクション .2.4.1ループ構造 リストuntil
、while
、およびfor
。 注do-while
はありません。