Linux Bashのダブルアンパーサンド(&&)とセミコロン(;)の違いは何ですか?


112

Linux Bashのアンパサンドとセミコロンの違いは何ですか?

例えば、

$ command1 && command2

$ command1; command2

6
私はここでこれに答えました:superuser.com/a/619019/107862
Etan Reisner

9
オフトピックについては、前回チェックしたとき、bashはまだプログラミング言語でしたが、以前は間違っていて、ドライフルーツのお菓子だった可能性があります。
スティーブK

それは、あなたが特定の行動について質問したり、それが確かに話題になっている特定のことを行うための正しい方法を質問したりしていました。これは、「言語の構文に関する質問」という灰色のカテゴリに分類されますが、私が考える限り、「プログラミング」の質問ほど明確ではありません。
Etan Reisner、2015

4
バッシュはある意味でドライで、ある意味で甘いです。一日の終わりには、それは非常に快適で消化しやすいです。ただし、赤ちゃんから簡単に盗むことはできません。
code_monk

回答:


138

&&演算子は、ブールAND演算子である:左側が非ゼロの終了ステータス、オペレータ戻りステータスそれを返し、右側(それ短絡)を評価していない場合、それ以外の場合は右側を評価し、その終了ステータスを返します。これは通常、正常にcommand2実行された場合にのみ実行されることを確認するために使用されcommand1ます。

;それは関係なく、最初の1が成功したかどうかの2番目のコマンドを実行しますので、トークンは単に、コマンドを区切ります。


6
二重アンパサンドはbashの&&単一アンパサンドと&は異なりますか?
チャーリーパーカー

16
@CharlieParkerを指定する&と、コマンドはバックグラウンドで実行されるため、はい。「これをバックグラウンドで実行する」は、「この次のコマンドが成功した場合にのみ次のコマンドを実行する」とは大きく異なります。
cdhowie 2017年

command2のはCommand1]を実行します返さゼロ ...それが正常に終了を意味し、終了ステータスを
ニク

33

command1 && command2

command1 && command2実行が正常に終了したcommand2場合にのみcommand1実行されます。Unixの専門用語では、それはゼロに等しい終了コード / 戻りコードを意味します。

command1; コマンド2

command1; command2を実行したcommand2command1、順次実行します。コマンドが成功したかどうかは関係ありません。


6

前者はAND短絡評価を使用した単純なロジックで、後者は2つのコマンドを区切るだけです。

実際に起こることは、最初のプログラムがゼロ以外の終了コードを返すとき、全体ANDが評価されFALSE、2番目のコマンドは実行されないということです。後者は単に両方を順番に実行するだけです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.