&& è l'AND logico:
&& è un modo di esprimere l' AND logico , il che significa che l'intera espressione è vera solo se entrambi i lati sono veri. In logica, si dice che l' intera affermazione (P&Q) è vera solo quando P e Q sono veri.
Di conseguenza, i computer in genere trattano P&Q come una valutazione di corto circuito . Quindi, poiché l'intera istruzione sarà vera solo se P e Q sono veri, allora se P è falsa, l'istruzione Q non viene valutata . Fondamentalmente i computer sono pigri (efficienti) e non si preoccupano di valutare Q se non ne hanno. Questo vale anche per OR logico, vedere il link precedente.
I tre contesti di && in Bash:
1) Utilizzo della valutazione di cortocircuito con lo stato di uscita di un comando:
ogni comando ha uno stato di uscita. Se un comando ha un errore, ha uno stato di uscita diverso da zero. Pertanto, se lo stato di uscita è diverso da zero e && viene utilizzato per concatenare i comandi in un'istruzione, i comandi successivi non verranno valutati (eseguiti) se quello precedente non aveva uno stato di uscita pari a 0 (Vero). Ciò è dovuto alla valutazione del corto circuito. Quindi se hai:
P && Q
Q non verrà eseguito se P non era vero (se P esce con uno stato diverso da 0, non è vero). Proprio come:
./configure && make
make non verrà eseguito se configure ha avuto un errore, non era vero. Quindi, in sostanza, finisce per essere un modo di scrivere se poi l'istruzione:
if ./configure ; then
make
fi
Tieni presente che nella maggior parte dei contesti 0 è falso, ma non quando si tratta di uno stato di uscita.
2) && Può essere usato nel comando di prova [[]] di Bash:
&& Può anche essere usato all'interno del comando test integrato in bash [[]] per combinare espressioni in modo simile a come combinare comandi. L'intera operazione di test sarà vera solo se entrambi gli operandi (lati) di && sono veri, ad esempio:
if [[ ( $a -gt 2 ) && ( $a -lt 5 ) ]]; then ...
sarebbe un modo per dire se $ a è un numero intero compreso tra 2 e 5 (esclusi 2 e 5).
3) Valutazione aritmetica:
Infine, && può essere utilizzato nella valutazione aritmetica come AND logico. Se entrambi (AND logico) dei numeri seguenti sono diversi da zero, restituisce 0, altrimenti viene restituito 1:
kbrandt@desktop:~/$ echo $((1 & 1))
1
kbrandt@desktop:~/$ echo $((0 && 1))
0