「コマンド&&コマンド」と「コマンド」の違いは何ですか?コマンド"


49

Ubuntuでこれらの2つの使用法を見る「command && command」と「command; command」、
たとえばapt-get update && apt-get upgrade

使用するとどうなりますかapt-get update; apt-get upgrade
この特定の使用法を求めているわけではありませんが、一般的にこれら2つの使用法の違いは何ですか?


2
Winコマンドラインとバッチには同じ機能があります:& (simple sequencing), && (conditional AND) and || (conditional OR)
カラン

5
Bashリファレンスマニュアル–コマンドのリストも参照してください。一般的に、ドキュメンテーションにはないものは何もありません。特定の構文要素について質問がある場合は、検討する価値があります。
slhck

1
@Karanそして完全を期すために、bash(linux / Ubuntu)||も同様です。
イズカタ

回答:


88

&&論理演算子です。;単純なシーケンスです。

cmd1 && cmd2、cmd1が正常な戻りコードで終了した場合にのみ、cmd2が実行されます。

一方cmd1; cmd2、cmd2はcmd1の終了ステータスに関係なく実行されます(スクリプトなどのすべての失敗で終了するようにシェルを設定していない場合)。

関連する注記ではcmd1 || cmd2||「OR」論理演算子を使用して、cmd2はcmd1が失敗した(ゼロ以外の終了コードを返す)場合にのみ実行されます。

これらの論理演算子は、基本的なifステートメントの代わりにスクリプトで使用される場合があります。例えば、

if [[ -f "$foo" ]]; then mv "$foo" "${foo%.txt}.mkd"; fi

...より簡潔に達成できます:

[[ -f "$foo" ]] && mv "$foo" "${foo%.txt}.mkd"

私の理解では、成功した戻りコードは0を意味し、boolにキャストされると論理的にfalseになるため、少し間違っていると思います。そのため、ほとんどの言語で使用されているMccarthy評価の哲学では、次のステートメントを評価(実行)するのではなく、すぐにfalseを返す必要があります。
デラ

33

構文

command1 && command2

command2command1、ゼロ( true)の終了ステータスを返す場合にのみ実行されます。つまり、実行command1し、成功した場合は実行しcommand2ます。

command1 ; command2

関係なく、command1command2の両方が実行されます。セミコロンを使用すると、多くのコマンドを1行で入力できます。

関連

command1 || command2

command2は、 command1がゼロ以外の終了ステータスを返す場合にのみ実行されます。つまり、command1正常に実行するか、を実行しますcommand2


&& オペレーター:

$ rm /tmp/filename && echo "File deleted"

; オペレーター:

$ echo "foo" ; echo "bar"

|| オペレーター:

$ cat /tmp/filename 2>/dev/null || echo "Failed to open file"

外部リンク

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