複数のターミナルコマンドを順番に実行する時につける「&&」と「;」と「||」の違い

2015年7月18日

double_ampersand_or_semi_colon

当ブログでdefaultsコマンド(普通の操作では変更できないMacの設定を変えられるコマンド)を紹介する時に、「;(セミコロン)」がよく出てきますが、いまいち理解しきれていなかったので調べなおしてみました。

  • コマンドとコマンドの間に「&&」もしくは「;」をつけると複数のコマンドを順番に実行できる
  • 「;」は他のコマンドの実行結果に依存せず順番に実行される
  • 「&&」はエラーが出た場合、後続コマンドを実行しない
  • 「||」はエラーが出た場合、後続コマンドを実行する

例えば

hoge ; date

というコマンドを実行した場合、「hoge」という存在しないコマンドを実行したのでエラーが出ますが、後続の「date」コマンドは実行されます。

同じように

hoge && date

というコマンドを実行した場合、「hoge」でエラーが出ているので後続のdateコマンドは実行されません。

hoge || date

というコマンドを実行した場合、前述の「;」の時と同じ結果になりますが本質は違い、エラーを起こした時にしか後続コマンドは実行されませんので、

cd || date

というコマンドを実行すると「cd」コマンドは正常に実行されるので後続の「date」コマンドは実行されません。

以上のことから「defaults」コマンドを実行した後に「killall Dock」でDockを再起動するという定番の記述には「;」ではなく「&&」を利用した方が良さそうです。

参考にしたページ