Подтвердить что ты не робот

В чем разница между double-ampersand (&&) и точкой с запятой (;) в Linux Bash?

В чем разница между амперсандом и точкой с запятой в Linux Bash?

Например,

$ command1 && command2

против

$ command1; command2
4b9b3361

Ответ 1

Оператор && является логическим оператором AND: если левая сторона возвращает ненулевой статус выхода, оператор возвращает этот статус и не оценивает правую сторону (это короткие замыкания), в противном случае он оценивает право и возвращает свой статус выхода. Это обычно используется, чтобы убедиться, что command2 выполняется только в том случае, если command1 успешно запущен.

Ток ; просто отделяет команды, поэтому он запускает вторую команду независимо от того, удастся ли ей выполнить первую.

Ответ 2

command1 && & command2

command1 && command2 выполняет command2, если (и только если) command1 выполнение завершается успешно. В юрговоме Unix это означает, что код выхода/код возврата равен нулю.

command1; command2

command1; command2 выполняет command2 после выполнения command1, последовательно. Неважно, были ли команды успешными или нет.

Ответ 3

Первая - простая логика AND с использованием оценки короткого замыкания, последняя просто ограничивает две команды.

Что происходит в реальности, так это то, что когда первая программа возвращает ненулевой код выхода, весь AND оценивается как FALSE, а вторая команда не будет выполнена. Более поздние просто выполняют их как по порядку.