Ubuntuでこれらの2つの使用法「コマンド&&コマンド」と「コマンド;コマンド」を確認しました。
例えば。 apt-get update && apt-get upgrade
apt-get update; apt-get upgrade
を使用するとどうなりますか?
私はこの特定の使用法を求めていませんが、一般的にこれら2つの使用法の違いは何ですか?
&&
は論理演算子です。 ;
は単純なシーケンスです。
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"
command1 && command2
command2は、command1
が終了ステータス0を返す場合にのみ実行されます(true)。つまり、command1
を実行し、成功した場合はcommand2
を実行します。
command1 ; command2
command1とcommand2の両方が実行されます。セミコロンを使用すると、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"