web-dev-qa-db-ja.com

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

Ubuntuでこれらの2つの使用法「コマンド&&コマンド」と「コマンド;コマンド」を確認しました。
例えば。 apt-get update && apt-get upgrade

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

49
user208555

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

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

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

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

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

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

...以下を使用すると、より簡潔に実現できます。

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

構文

command1 && command2

command2は、command1が終了ステータス0を返す場合にのみ実行されます(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
33
stderr