В чем разница между амперсандом и точкой с запятой в Linux Bash ?
Например,
$ command1 && command2
против
$ command1; command2
В чем разница между амперсандом и точкой с запятой в Linux Bash ?
Например,
$ command1 && command2
против
$ command1; command2
Ответы:
&&Оператор является логическим оператором И: если левая сторона возвращает ненулевое состояние выхода, оператор возвращает этот статус и не оценивает правую стороны (его короткое замыкание), в противном случае он правая стороны и возвращает статус выхода . Обычно это используется, чтобы убедиться, что command2он запускается только в случае command1успешного выполнения.
;Маркер просто отделяет команды, так что он будет работать вторую команду , независимо от того , или не удается первым.
&&отличается от одиночного амперсанда &в bash?
&заставляет команду запускаться в фоновом режиме, так что да. «Запускать это в фоновом режиме» сильно отличается от «запускать эту следующую команду, только если эта другая успешно».
;еще ждет завершения первой команды?
a;bозначает «беги, aа потом беги b». a&&bозначает «запускать a, а затем запускать bтолько в случае aуспеха».
command1 && command2выполняется, command2если (и только если) command1выполнение завершается успешно. На жаргоне Unix это означает, что код выхода / код возврата равен нулю.
command1; command2выполняется command2после выполнения command1, последовательно. Неважно, были ли команды успешными или нет.
Первый представляет собой простую логику ANDс использованием оценки короткого замыкания, второй просто разделяет две команды.
На самом деле происходит следующее: когда первая программа возвращает ненулевой код выхода, ANDоценивается все, FALSEи вторая команда не выполняется. Последний просто выполняет их обоих по порядку.