23 ループ内で非同期コマンドを使用するとエラーが発生するのはなぜですか? $ for i in {1..8}; do sleep 100 & ; done bash: syntax error near unexpected token `;' 私がそれを $ for i in {1..8}; do > sleep 100 & > done これは正常に動作します。 エラーなしで1行に書き込むにはどうすればよいですか? bash — ティム ソース
39 ドロップ;: for i in {1..8}; do sleep 100 & done &コマンドを分離するので、;無関係である(とシェルとの間に何かを期待する&と;)。 — スティーブン・キット ソース ありがとう。「シェルは&と;の間に何かを期待している」ので、なぜ&と;の間に空のコマンドを使用できないのですか — ティム 5 リアルノーオペレーションコマンドは次のとおりです。 — HTNW 1 @StephenKitt、あなたが参照するセクションも述べています:「対話型セッションまたは他のコマンドを含むスクリプトでは、余分な<newline>または<semicolon>文字...文法の一部。」うーん... — ワイルドカード 1 興味深い@Wildcard、私はティムのフォローアップへの答えを研究するときにその文の結果を考えていませんでした。BashのPOSIXモードを有効にしても、これに関する動作は変わりません。うーん確かに... — スティーブン・キット 2 @Wildcard:echo foo ; ; echo barbash 4.4で言うsyntax error near unexpected token `;'。 dash同様のエラーが発生します。この場合、文法の他の部分はそれを消費しないため、空のコマンドです。彼らは(改行)の;ような行の終わりに冗長性について話しているのではないかと思いsleep 100;ます。 — ピーターコーデス
22 do中括弧でアクションをグループ化します。 for i in {1..8}; do { sleep 100 & }; done あなたにとってもBashにとってもわかりやすい! — パンディア ソース