Что касается не по теме, то в прошлый раз, когда я проверил, bash все еще был языком программирования, но раньше я ошибался и это могло быть немного сухофруктов.
Стив К.
Это так, и если бы вы задали вопрос о конкретном поведении или правильном способе сделать определенное действие, это, безусловно, было бы по теме. Это относится к более серой категории «вопроса о синтаксисе языка», что, на мой взгляд, не так явно относится к вопросу «программирования».
Этан Рейснер
4
bash в некотором роде сухой и в некотором смысле сладкий. В конце концов, это довольно приятно и легко усваивается. Однако его нелегко украсть у младенцев.
code_monk
Ответы:
139
&&Оператор является логическим оператором И: если левая сторона возвращает ненулевое состояние выхода, оператор возвращает этот статус и не оценивает правую стороны (его короткое замыкание), в противном случае он правая стороны и возвращает статус выхода . Обычно это используется, чтобы убедиться, что command2он запускается только в случае command1успешного выполнения.
;Маркер просто отделяет команды, так что он будет работать вторую команду , независимо от того , или не удается первым.
двойной амперсанд &&отличается от одиночного амперсанда &в bash?
Чарли Паркер
16
@CharlieParker &заставляет команду запускаться в фоновом режиме, так что да. «Запускать это в фоновом режиме» сильно отличается от «запускать эту следующую команду, только если эта другая успешно».
cdhowie
Команда 2 будет запускать только команду 1 вернула нулевой статус выхода, что означает, что она успешно завершена ..
Ник
Все ;еще ждет завершения первой команды?
RFII
@rfii Да, но он выполняет вторую команду независимо от того, была ли первая команда успешной. a;bозначает «беги, aа потом беги b». a&&bозначает «запускать a, а затем запускать bтолько в случае aуспеха».
cdhowie,
33
команда1 && команда2
command1 && command2выполняется, command2если (и только если) command1выполнение завершается успешно. На жаргоне Unix это означает, что код выхода / код возврата равен нулю.
command1; command2
command1; command2выполняется command2после выполнения command1, последовательно. Неважно, были ли команды успешными или нет.
Первый представляет собой простую логику ANDс использованием оценки короткого замыкания, второй просто разделяет две команды.
На самом деле происходит следующее: когда первая программа возвращает ненулевой код выхода, ANDоценивается все, FALSEи вторая команда не выполняется. Последний просто выполняет их обоих по порядку.
Ответы:
&&
Оператор является логическим оператором И: если левая сторона возвращает ненулевое состояние выхода, оператор возвращает этот статус и не оценивает правую стороны (его короткое замыкание), в противном случае он правая стороны и возвращает статус выхода . Обычно это используется, чтобы убедиться, чтоcommand2
он запускается только в случаеcommand1
успешного выполнения.;
Маркер просто отделяет команды, так что он будет работать вторую команду , независимо от того , или не удается первым.источник
&&
отличается от одиночного амперсанда&
в bash?&
заставляет команду запускаться в фоновом режиме, так что да. «Запускать это в фоновом режиме» сильно отличается от «запускать эту следующую команду, только если эта другая успешно».;
еще ждет завершения первой команды?a;b
означает «беги,a
а потом бегиb
».a&&b
означает «запускатьa
, а затем запускатьb
только в случаеa
успеха».команда1 && команда2
command1 && command2
выполняется,command2
если (и только если)command1
выполнение завершается успешно. На жаргоне Unix это означает, что код выхода / код возврата равен нулю.command1; command2
command1; command2
выполняетсяcommand2
после выполненияcommand1
, последовательно. Неважно, были ли команды успешными или нет.источник
Первый представляет собой простую логику
AND
с использованием оценки короткого замыкания, второй просто разделяет две команды.На самом деле происходит следующее: когда первая программа возвращает ненулевой код выхода,
AND
оценивается все,FALSE
и вторая команда не выполняется. Последний просто выполняет их обоих по порядку.источник