яка різниця між "команда & команда" та "команда; командувати »


49

Я бачу ці два використання в Ubuntu "команда && команда" та "команда; команда",
наприкладapt-get update && apt-get upgrade

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


2
Win командного рядка і пакетного мають ту ж функцію: & (simple sequencing), && (conditional AND) and || (conditional OR).
Каран

5
Дивіться також: Посібник по Bash - Список команд . Загалом, у документації нічого не можна знайти; це дійсно варто подивитися, якщо у вас є питання про конкретні елементи синтаксису.
slhck

1
@Karan А для повноти також є bash (linux / Ubuntu) ||.
Ізката

Відповіді:


88

&&є логічним оператором. ;є простим послідовністю.

В cmd1 && cmd2, cmd2 буде запущено, лише якщо cmd1 вийде з успішним кодом повернення.

В той час як cmd1; cmd2cmd2 запускається незалежно від статусу виходу cmd1 (якщо припустити, що ви не встановили оболонку для виходу з усіх помилок у вашому сценарії чи щось подібне).

У відповідній примітці, cmd1 || cmd2використовуючи ||логічний оператор 'АБО', cmd2 буде запускатися лише у випадку відмови cmd1 (повертає ненульовий код виходу).

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

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

... можна досягти більш стислого за допомогою:

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

Я вважаю це трохи помилковим, тому що, з мого розуміння, успішний код повернення означає 0, який при передачі в bool дає логічну помилку. Отже, виходячи з філософії оцінки Маккарті, що використовується в більшості мов, вона повинна негайно повернути помилкове, а не оцінювати (виконувати) наступне твердження.
Делла

33

Синтаксис

command1 && command2

команда2 виконується, якщо і лише тоді,command1повертає статус виходу в нуль ( вірно ). Іншими словами, біжіть,command1і якщо це успішно, то бігайтеcommand2.

command1 ; command2

І команда1, і команда2 будуть виконуватися незалежно. Точка з комою дозволяє вводити багато команд в одному рядку.

Пов'язані :

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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.