49

Я вижу эти два использования в Ubuntu "команда && команда" и "команда; команда",
например, apt-get update && apt-get upgrade

Что будет отличаться, если я использую apt-get update; apt-get upgrade?
Я не спрашиваю об этом конкретном использовании, но в целом, в чем разница между этими двумя видами использования?

2 ответа2

87

&& - логический оператор. ; это простая последовательность.

В cmd1 && cmd2 cmd2 будет запускаться только в том случае, если cmd1 завершается с успешным кодом возврата.

Принимая во внимание, что в cmd1; cmd2 , cmd2 будет работать независимо от состояния выхода cmd1 (при условии, что вы не настроили выход оболочки при всех сбоях в вашем скрипте или чем-то еще).

На связанной ноте, с cmd1 || cmd2 , используя || Логический оператор «ИЛИ», cmd2 будет выполняться только в случае сбоя cmd1 (возвращает ненулевой код выхода).

Эти логические операторы иногда используются в сценариях вместо базового оператора if. Например,

if [[ -f "$foo" ]]; then mv "$foo" "${foo%.txt}.mkd"; fi

... может быть более кратко достигнуто с помощью:

[[ -f "$foo" ]] && mv "$foo" "${foo%.txt}.mkd"
33

Синтаксис

command1 && command2

Команда2 выполняется тогда и только тогда, когда command1 возвращает нулевое состояние выхода (истина). Другими словами, запустите command1 и, если это успешно, то запустите command2 .

command1 ; command2

И command1, и command2 будут выполняться независимо. Точка с запятой позволяет вводить много команд в одной строке.

Связанные:

command1 || command2

Команда2 выполняется тогда и только тогда, когда команда1 возвращает ненулевое состояние выхода. Другими словами, выполните command1 успешно или запустите command2 .


пример

&& оператор:

$ rm /tmp/filename && echo "File deleted"

; оператор:

$ echo "foo" ; echo "bar"

|| оператор:

$ cat /tmp/filename 2>/dev/null || echo "Failed to open file"

Внешняя ссылка

  1. Linuxtopia.org
  2. Tldp.org

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .