В чем причина использования && вместо; разместить команды на одной строке?


30

Не будучи экспертом ни в Linux, ни в Unix, мне интересно, в чем разница между этими двумя методами, когда две команды располагаются в одной строке? Я не вижу разницы в выводе в этом упрощенном примере

Pete$date ; time
Sun Mar 17 19:37:20 EDT 2013

real    0m0.000s
user    0m0.000s
sys 0m0.000s

Pete$date &&time
Sun Mar 17 19:37:46 EDT 2013

real    0m0.000s
user    0m0.000s
sys 0m0.000s

Это не вызвало никаких проблем - мне просто любопытно ..

Ответы:


43

&&это логическое «и». Первый аргумент оценивается, а второй - только если первый возвращает true. Причина в том, что «false И что-то» всегда ложно, поэтому нет необходимости оценивать второй аргумент в этом случае.

Таким образом, при использовании &&убедитесь, что вторая команда не выполняется, если первая сообщает об ошибке ( trueпредставлена ​​кодом выхода 0, который указывает, что ошибки не было). Напротив, ;выполняет обе команды, независимо от того, каков результат первой.

Вывод: объединение команд в команду &&- хорошая привычка. В отличие от ;этого он не будет выполнять последующие команды, если что-то пойдет не так.


Вы имеете в виду, что 0означает trueили это 0означает, что правда - есть ошибка?
Майкл Батлер

1
@MichaelButler: 0значит true. Я добавил пояснения.
Азимут

26

;

Последовательно выполняет команды, независимо от того, каким был предыдущий статус выхода:

# sh -c "exit 0" ; echo "2nd command"
2nd command
# sh -c "exit 1" ; echo "2nd command"
2nd command

&&

Логическое И

Выполните следующую команду, но только если предыдущая команда была выполнена успешно (состояние выхода было 0):

# sh -c "exit 0" && echo "2nd command"
2nd command
# sh -c "exit 1" && echo "2nd command"
#

||

Логическое ИЛИ

Выполните следующую команду, но только если предыдущая команда завершилась неудачно (состояние выхода не было 0 ):

# sh -c "exit 0" || echo "2nd command"
#
# sh -c "exit 1" || echo "2nd command"
2nd command

6
Также sh -c "exit 0"может быть заменено на trueв этих примерах и sh -c "exit 1"на false.
Flimm
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.