while <command>
whileループ内の<command>
各ループの実行は他のループとは独立していますか?次の例では、whileループは
read
ファイル内のすべての行を1つずつ読み取ることができますが、whileループのないwhileは繰り返されるたびにread
常にファイルの最初の行を読み取るのはなぜですか?whileループを使用せずにファイル内のすべての行を1つずつ読み取ることはできますか
read
?$ cat /tmp/tt 1 2 3 4 5 6 7 8 9 10 11 $ cat /tmp/tt | while read tt; do echo $tt; done 1 2 3 4 5 6 7 8 9 10 11 $ cat /tmp/tt | read tt $ echo $tt 1 2 3 4 5 $ cat /tmp/tt | read tt $ echo $tt 1 2 3 4 5
ベストアンサー1
第1四半期
while
<command>
whileループ内の<command>
各ループの実行は他のループとは独立していますか?
はい、<command>
実行されたループのすべてのループで実行されますwhile
。
実行されるループの数は、他のループも入力を消費すると他のループの影響を受けますstdin
。このread
コマンドはstdinから読み取られます(-u n
lesオプションを使用しない限り)。いくつかの他の読み取りは同じ入力を消費する可能性があり、これは影響を与えます。最初 while
リングの形。
第2四半期
コードに大きなバグがあり、新しいコードです[1]。
$ cat /tmp/tt | { read tt; echo "$tt"; }
1 2 3 4 5
$ cat /tmp/tt | { read tt; echo "$tt"; }
1 2 3 4 5
コマンドはcat
常にファイルの先頭から始まります。
このread
コマンド(-d
()内に他のオプションを設定せずに)は、最初の行を取得して次のように入力します。new line
$'\n'
出口(パイプを閉じる)。
ループに読み込んだ内容があっても、while
まだ実行するコードがあります(while)。これにより、パイプが開いたままになります。コマンドから次の行を取得しますcat
。
$ cat /tmp/tt | while read tt; do echo $tt; done 1 2 3 4 5 6 7 8 9 10 11
[1]コードがきれいでなければなりません。確認して$tt
みてください。unset tt; cat /tmp/tt |{ read tt; echo "$tt"; }