В чем разница между double-ampersand (&&) и точкой с запятой (;) в Linux Bash?
В чем разница между амперсандом и точкой с запятой в Linux Bash?
Например,
$ command1 && command2
против
$ command1; command2
Ответ 1
Оператор && является логическим оператором AND: если левая сторона возвращает ненулевой статус выхода, оператор возвращает этот статус и не оценивает правую сторону (это короткие замыкания), в противном случае он оценивает право и возвращает свой статус выхода. Это обычно используется, чтобы убедиться, что command2 выполняется только в том случае, если command1 успешно запущен.
Ток ; просто отделяет команды, поэтому он запускает вторую команду независимо от того, удастся ли ей выполнить первую.
Ответ 2
command1 && & command2
command1 && command2 выполняет command2, если (и только если) command1 выполнение завершается успешно. В юрговоме Unix это означает, что код выхода/код возврата равен нулю.
command1; command2
command1; command2 выполняет command2 после выполнения command1, последовательно. Неважно, были ли команды успешными или нет.
Ответ 3
Первая - простая логика AND с использованием оценки короткого замыкания, последняя просто ограничивает две команды.
Что происходит в реальности, так это то, что когда первая программа возвращает ненулевой код выхода, весь AND оценивается как FALSE, а вторая команда не будет выполнена. Более поздние просто выполняют их как по порядку.