&
バックグラウンドでコマンドを実行し、ステータスに関係なく 0 を返します。
マニュアルページから:
<ブロック引用>コマンドが制御演算子 &によって終了された場合、シェルはサブシェルのバックグラウンドでコマンドを実行します。シェルはコマンドの終了を待たず、戻りステータスは 0 です。コマンドは; で区切られています。順次実行されます。シェルは、各コマンドが順番に終了するのを待ちます。戻りステータスは、最後に実行されたコマンドの終了ステータスです。
コマンドが何であるかを見てください:
test -x examples.desktop && echo $?
これは、examples.desktop
かどうかを確認することを意味します 実行可能である場合は echo $?
を実行します .
test -x examples.desktop & echo $?
examples.desktop
かどうかを確認することを意味します 「バックグラウンド」で実行可能です。次に echo $?
を実行します .
&&
の意味 そして &
は本質的に異なります。
&&
とは Bash や他の多くのプログラミング言語では&&
「AND」を意味します。そして、このようなコマンド実行コンテキストでは、&&
の左右の項目を意味します この場合、順番に実行する必要があります。&
とは そして単一の&
前のコマンドが&
のすぐ左にあることを意味します — バックグラウンドで実行する必要があります。
あなたの例を見てください:
[email protected]:~$ test -x examples.desktop && echo $?
[email protected]:~$ test -x examples.desktop & echo $?
[1] 2992
0
最初のコマンドは、構造上、実際には何も返しません。しかし、2 番目のコマンドは [1] 2992
を返します 2992
バックグラウンドで実行されているプロセス ID (PID) と 0
を参照します。 最初のコマンドの出力です。
2 番目のコマンドは test -x examples.desktop
を実行しているだけなので バックグラウンドでは非常に迅速に行われるため、プロセス ID が生成されてすぐに消えてしまいます。