1 行のコマンドで ; を使用する理由は何ですか?

1 行のコマンドで ; を使用する理由は何ですか?

;次のような 1 行のスクリプトでは何を意味しますか:

while true; do sudo -n true; sleep 60; kill -0 '$$' || exit; done 2>/dev/null &

これは新しい行を意味しますか、それとも「次のコマンド」を意味しますか?

答え1

これはコマンドの区切りです。ただし、最初はステートメントを終了するものとして考えた方がよいかもしれませんwhile

例えば、何らかのコマンドが成功を返す間ループを実行したい場合は、次のようにします。

while test -f /foo; do some_command; done`

セミコロンは への引数の終了を示すために使用されます。そうでない場合、 はへの別の引数であるtestとみなされます。dotest

ただし、セミコロンの代わりに改行を使用することもできます。次の例は、セミコロンがないだけで、上記の例とまったく同じです。

while test -f /foo
do
some_command
done

実際、bash では、上記のコマンドを実行し、完了した後 (または CTRL+C を押した後)、履歴を戻ると (上矢印キーなど)、複数行のコマンドがセミコロンを使用したコマンドに置き換えられていることに気付くでしょう。


そうです、 や などの構文はifwhile通常のシェルの動作を中断します。
は奇妙に見えるので、個人的には常に構文が奇妙だと思っていましたdo。しかし、慣れれば大丈夫です。

関連情報