Ubuntuでこれらの2つの使用法を見る「command && command」と「command; command」、
たとえばapt-get update && apt-get upgrade
使用するとどうなりますかapt-get update; apt-get upgrade
?
この特定の使用法を求めているわけではありませんが、一般的にこれら2つの使用法の違いは何ですか?
||
も同様です。
Ubuntuでこれらの2つの使用法を見る「command && command」と「command; command」、
たとえばapt-get update && apt-get upgrade
使用するとどうなりますかapt-get update; apt-get upgrade
?
この特定の使用法を求めているわけではありませんが、一般的にこれら2つの使用法の違いは何ですか?
||
も同様です。
回答:
&&
論理演算子です。;
単純なシーケンスです。
で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"
command1 && command2
command2はcommand1
、ゼロ( 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"
& (simple sequencing), && (conditional AND) and || (conditional OR)
。