Сегодня на собесе задал кандидату вопрос, а расскажи чем отличается && и «;» при склейке консольных команд. В ответ получил — а мне это зачем знать? Если с && не заработало, то поменяю на «;».

Да и правда, у меня иногда такой же подход. Мне быстрее в моменте поменять одно на другое, чем в гугол лезть. Понятное дело, если это выполняешь на критичной инфраструктуре, то такое уже не проканает. Нужно отдавать полный отчёт о своих действиях.

Давай разбираться, чем отличаются:

command && command

от:

command ; command

&& (AND) это логический оператор, а вот «;» обычная последовательность действий.

В первом примере с &&, вторая команда запустится, только в том случае, если первая завершится успешным кодом возврата. Соответственно если первая накроется пиздой, произойдет короткое замыкание и вторая команда даже не соизволит запуститься.

А вот в случае с «;», вторая команда запустится при любых обстоятельствах, конечно если это не kernel panic и при условии если в оболочке не включен set -e (завершение при любых сбоях).

Да, есть еще конструкция:

false || echo "hello bashdays"

Тут у нас логический оператор OR (или). Вторая команда будет запущена, только если первая сыграет в ящик. В примере выше выполнится вторая команда, так как первая всегда завершается с ошибкой. Если false заменить на true, соответственно на экране будет пусто.

Иногда применяю это в скриптах, когда одна утилита не смогла справиться, подключается вторая.

Роман Шубин
Роман Шубин
CEO & CTO, Главред в «Цифровой улей»
Задать вопрос
База. Тут хочешь не хочешь, оно должно на подкорке быть.

Интересно конечно, как людей на вайтишных курсах обучают. Человек отучился 6 месяцев, администратор Linux, диплом. А в голове обезьяна тарелками стучит, администрирует. Хотя тут всё от человека зависит, если ему это не интересно, то никакие курсы ситуацию не изменят.

Ладно, всякое бывает. Не смею больше задерживать. Спокойной ночи. Увидимся!