В чем разница между 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
, а вторая команда не будет выполнена. Более поздние просто выполняют их как по порядку.