&&は論理ANDです:
&&は論理ANDを表現する方法です。つまり、両方の式が真である場合にのみ式全体がTrueになります。ロジックでは、PとQの両方が真である場合にのみステートメント全体(P&Q)が真であると言われています。
この結果として、コンピューターは一般にP&Qを短絡評価として扱います。したがって、ステートメント全体は、PとQの両方が真の場合にのみ真になるため、Pが偽の場合、ステートメントQは評価されません。基本的に、コンピューターは怠zy(効率的)であり、Qの評価がわからなくても気にしません。これは論理ORにも当てはまります。前のリンクを参照してください。
Bashの&&の3つのコンテキスト:
1)コマンドの終了ステータスでの短絡評価の使用:
すべてのコマンドには終了ステータスがあります。コマンドにエラーがある場合、コマンドの終了ステータスはゼロ以外です。したがって、終了ステータスがゼロ以外で、&&を使用してコマンドを1つのステートメントにチェーンする場合、前のコマンドの終了ステータスが0(True)でない場合、後のコマンドは評価(実行)されません。これは、短絡評価のためです。あなたが持っている場合:
P && Q
Pが真でない場合、Qは実行されません(Pが0以外のステータスで終了する場合、真ではありません)。次と同じ:
./configure && make
configureにエラーがあった場合、makeは実行されませんでした。したがって、基本的には、if thenステートメントを記述する方法になります。
if ./configure ; then
make
fi
その場合、ほとんどのコンテキストでは0はfalseですが、終了ステータスになる場合はそうではありません。
2)&&は、Bashのビルトイン[[]]テストコマンドで使用できます。
&& bash [[]]の組み込みテストコマンド内で使用して、コマンドを結合するのと同様の方法で式を結合することもできます。テスト操作全体が真になるのは、&&の両方のオペランド(サイド)が真である場合のみです。次に例を示します。
if [[ ( $a -gt 2 ) && ( $a -lt 5 ) ]]; then ...
$ aが2〜5の整数(2と5を含まない)である場合の言い方になります。
3)算術評価:
最後に、&&は算術評価で論理ANDとして使用できます。場合は、両方の非ゼロである、次の中の数字の(論理AND)、それは他の1が返され、0を返します。
kbrandt@desktop:~/$ echo $((1 & 1))
1
kbrandt@desktop:~/$ echo $((0 && 1))
0