私はwhile
ループが何であるかを知っています。しかし、私はそれが次にのみ動作するのを見ました。
while [condition]
while ![condition]
while TRUE (infinite loop)
次のドアはまたはでwhile
なければなりません。TRUE
FALSE
というシェル組み込みコマンドがあります:
。何もしないダミー命令だと説明されていますが、ここでも同じか、 になれるのかTRUE
わかりませんFALSE
。何か違うかもしれませんが、何?
答え1
構文は次のとおりです。
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
C構文を((...))
模倣するには、Korn / bash / zsh構文を使用してください。while(1) { ...; }
それとももう少し複雑です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
ほとんどのシェル/実装では機能しますが)。
答え2
while :
無限ループです。:
何もしません(成功的に)。
したがって、何もせずにシェルが永遠にぶら下がりたい場合は、次のように書くことができます。
while :
do
:
done
;
または改行の代わりに1行で使用してください。while :; do :; done
while :
通常、特別な条件を付けずに何かを繰り返し実行したいときに使用されます。ループ内ではcontinue
、ステートメントを使用してbreak
ループを制御したり、条件を構文のようにループの末尾に移動したりできますdo ... while
。
答え3
ただし、whileの後のステートメントはTRUEまたはFALSEでなければなりません。
いいえ、条件付きコマンドはどのコマンド(*)でもかまいません。みんなシェルコマンドにはいくつかの戻り値があり、while
ループ(およびif
条件)は戻り値0を「true」として扱い、他のすべての値は「false」として扱います。(*または複数のコマンドのリスト、最後のコマンドが有効です)
に関しては:
、バッシュマニュアル返品状況とは何か明確に記載されています。
: [arguments]
パラメータの拡張とリダイレクトの実行以外は何もしません。戻り状態は 0 です。
組み込み機能がhelp
より明確になりました。
$ help :
[...]
No effect; the command does nothing
Exit Status:
Always succeeds.