Яка різниця між подвійним амперсандом (&&) та крапкою з комою (;) у Linux Bash?


112

Яка різниця між амперсандом і крапкою з комою в Linux Bash ?

Наприклад,

$ command1 && command2

проти

$ command1; command2

6
Я відповів на це тут: superuser.com/a/619019/107862
Ітан Рейснер

9
Щодо тематики, коли я останній раз перевіряв, баш все ще була мовою програмування, але я помилявся раніше, і це могла бути якась цукерка із сухофруктів.
Стів К

Це є, і якщо ви ставили питання про конкретну поведінку чи правильний спосіб зробити певну річ, це, безумовно, було б темою. Це підпадає під категорію сірого "питання про синтаксис мови", що настільки явно не є "програмуючим" питанням.
Ітан Рейснер

4
баш в чомусь сухий, а в чомусь солодкий. Зрештою, це досить приємно і засвоюється. Однак її неможливо легко вкрасти у немовлят.
code_monk

Відповіді:


138

&&Оператор є логічним оператором І: якщо ліва сторона повертає нульове стан виходу, оператор повертає цей статус і не оцінює праву сторони (його коротке замикання), в іншому випадку він права сторони і повертає статус виходу . Зазвичай це використовується для того, щоб переконатися, що command2його запускають лише в тому випадку, коли command1він працює успішно.

;Маркер просто відокремлює команди, так що він буде працювати другу команду , незалежно від того , чи вдасться першим.


6
чи подвійний амперсанд &&відрізняється від одиничної амперсанди &в баші?
Чарлі Паркер

16
@CharlieParker &викликає запуск команди у фоновому режимі, так що так. "Запустити це у фоновому режимі" сильно відрізняється від "запустити наступну команду, лише якщо ця інша успішна."
cdhowie

Command2 буде працювати тільки command1 повертається нульове стан виходу, а це означає , що успішно завершено ..
Nik

33

command1 && command2

command1 && command2виконується, command2якщо (і лише якщо) command1виконання закінчується успішно. У жаргоні Unix це означає вихідний код / код повернення, рівний нулю.

команда1; команда2

command1; command2виконується command2після виконання command1, послідовно. Не має значення, успішні були команди чи ні.


6

Перша - це проста логіка AND використовує оцінку короткого замикання, остання просто розмежовує дві команди.

У дійсності відбувається те, що коли перша програма повертає ненульовий код виходу, ціле ANDоцінюється, FALSEа друга команда не буде виконана. Пізніші просто виконують їх обидва в порядку.

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