構文は次のとおりです。
while
first list of commands
do
second list of commands
done
コマンドの最初のリスト(つまり、そのリストでの最後の実行)が成功する限り、ループでコマンドの2番目のリストを実行します。
そのコマンドの最初のリストでは、[
コマンドを使用してさまざまな種類のテストを実行できます:
。または、何もせず成功を返すnullコマンド、または他のコマンドを使用できます。
while :; do cmd; done
常に成功を返すcmd
ため、何度も何度も実行され:
ます。それが永遠のループです。あなたは使用することができtrue
、それをより読みやすくする代わりに、コマンドを:
while true; do cmd; done
以前は常に組み込ま:
れていました:
が、そうでtrue
はありませんでした(昔はほとんどのシェルがtrue
組み込まれていました)¹。
あなたが見るかもしれない他のバリアント:
while [ 1 ]; do cmd; done
上記では[
、「1」文字列が空ではないかどうかをテストするコマンドを呼び出しています(したがって、常に真です)
while ((1)); do cmd; done
Korn / bash / zsh ((...))
構文を使用してwhile(1) { ...; }
C を模倣する
または、より複雑なものuntil false; do cmd; done
、until ! true
...
これらは時々次のようにエイリアスされます:
alias forever='while :; do'
次のようなことができます:
forever cmd; done
条件がコマンドのリストであることを理解している人はほとんどいません。たとえば、次のように書いている人がいます。
while :; do
cmd1
cmd2 || break
cmd3
done
彼らが書くことができたとき:
while
cmd1
cmd2
do
cmd3
done
それがあることが、メイクセンスを行い、リストあなたは、多くの場合のように、物事やりたいようwhile cmd1 && cmd2; do...; done
にもコマンドリストであるが。
いずれにせよ、[
これは他のコマンドと同じであることに注意してください(最近のBourneのようなシェルに組み込まれていますが)、if
/ while
/ until
条件リストでのみ使用する必要はなく、これらの条件リストにはありませんそのコマンドを他のどのコマンドよりも多く使用するには。
¹ :
も短く、引数を受け入れます(無視します)。true
またはfalse
、引数を渡した場合の動作は指定されていません。したがって、たとえば次のようにすることができます。
while : you wait; do
something
done
しかし、次の動作:
until false is true; do
something
done
指定されていません(ただし、ほとんどのシェル/ false
実装で機能します)。
:
は何もしませんが、常にリターンコード0で終了します。したがって、同じでしたwhile true
(システムにtrue
実行可能ファイルがある場合)。