&& - это логическое И:
&& - это способ выражения логического И , то есть все выражение истинно, только если обе его стороны истинны. В логике говорят, что все утверждение (P & Q) верно только тогда, когда оба P и Q верны.
Как следствие этого, компьютеры обычно рассматривают P & Q как оценку короткого замыкания . Таким образом, поскольку весь оператор будет истинным, только если оба параметра P и Q истинны, то, если P ложен, оператор Q не оценивается . В основном компьютеры ленивы (эффективны), и не стоит оценивать Q, если у них их тоже нет. Это также верно для логического ИЛИ, см. Предыдущую ссылку.
Три контекста && в Bash:
1) Использование оценки короткого замыкания со статусом выхода команды:
каждая команда имеет статус выхода. Если команда имеет ошибку, она имеет ненулевой статус завершения. Таким образом, если статус выхода не равен нулю и && используется для объединения команд в оператор, более поздние команды не будут оцениваться (выполняться), если предыдущая команда не имела статуса выхода 0 (True). Это из-за оценки короткого замыкания. Так что если у вас есть:
P && Q
Q не будет выполняться, если P не было истинным (если P выходит со статусом чего-либо, кроме 0, это не так). Так же, как:
./configure && make
make не будет выполнен, если в configure произошла ошибка, значение true. Таким образом, в конечном итоге, в конце концов, это способ написать заявление 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) Арифметическая оценка:
Наконец, && может использоваться в арифметической оценке как Логическое И. Если оба (логическое И) чисел в следующем не ненулевые, он возвращает 0, иначе возвращается 1:
kbrandt@desktop:~/$ echo $((1 & 1))
1
kbrandt@desktop:~/$ echo $((0 && 1))
0