&& É o AND lógico:
&& é uma maneira de expressar AND lógico , o que significa que toda a expressão é True somente se os dois lados forem verdadeiros. Em lógica, diz-se que a afirmação inteira (P&Q) só é verdadeira quando P e Q são verdadeiros.
Como conseqüência disso, os computadores geralmente tratam o P&Q como uma avaliação de curto-circuito . Portanto, como a declaração inteira será verdadeira apenas se P e Q forem verdadeiros, se P for falso, a declaração Q não será avaliada . Basicamente, os computadores são preguiçosos (eficientes) e não se incomodam em avaliar o Q, se não tiverem também. Isso também é verdadeiro para OR lógico, consulte o link anterior.
Os três contextos de && no Bash:
1) Usando a avaliação de curto-circuito com o status de saída de um comando:
Todo comando tem um status de saída. Se um comando tiver um erro, ele terá um status de saída diferente de zero. Portanto, se o status de saída for diferente de zero e && for usado para encadear comandos juntos em uma instrução, os comandos posteriores não serão avaliados (executados) se o anterior não tiver o status de saída 0 (True). Isso ocorre devido à avaliação de curto-circuito. Então, se você tem:
P && Q
Q não será executado se P não for verdadeiro (se P sair com um status igual a 0, não é verdade). Da mesma forma que:
./configure && make
O make não será executado se o configure tiver um erro, não for verdadeiro. Então, basicamente, acaba sendo uma maneira de escrever a declaração if then:
if ./configure ; then
make
fi
Lembre-se de que, na maioria dos contextos, 0 é falso, mas não quando se trata de um status de saída.
2) && Pode ser usado no comando de teste incorporado [[]] do Bash:
&& Também pode ser usado dentro do comando de teste interno no bash [[]] para combinar expressões de maneira semelhante à combinação de comandos. Toda a operação de teste será verdadeira apenas se os dois operandos (lados) de && forem verdadeiros, por exemplo:
if [[ ( $a -gt 2 ) && ( $a -lt 5 ) ]]; then ...
seria uma maneira de dizer se $ a é um número inteiro entre 2 e 5 (não incluindo 2 e 5).
3) Avaliação Aritmética:
Por fim, && pode ser usado na avaliação aritmética como AND lógico. Se os dois (AND lógico) dos números a seguir forem diferentes de zero, ele retornará 0, caso contrário 1 será retornado:
kbrandt@desktop:~/$ echo $((1 & 1))
1
kbrandt@desktop:~/$ echo $((0 && 1))
0