Яка різниця між амперсандом і крапкою з комою в Linux Bash ?
Наприклад,
$ command1 && command2
проти
$ command1; command2
Яка різниця між амперсандом і крапкою з комою в Linux Bash ?
Наприклад,
$ command1 && command2
проти
$ command1; command2
Відповіді:
&&
Оператор є логічним оператором І: якщо ліва сторона повертає нульове стан виходу, оператор повертає цей статус і не оцінює праву сторони (його коротке замикання), в іншому випадку він права сторони і повертає статус виходу . Зазвичай це використовується для того, щоб переконатися, що command2
його запускають лише в тому випадку, коли command1
він працює успішно.
;
Маркер просто відокремлює команди, так що він буде працювати другу команду , незалежно від того , чи вдасться першим.
&&
відрізняється від одиничної амперсанди &
в баші?
&
викликає запуск команди у фоновому режимі, так що так. "Запустити це у фоновому режимі" сильно відрізняється від "запустити наступну команду, лише якщо ця інша успішна."
command1 && command2
виконується, command2
якщо (і лише якщо) command1
виконання закінчується успішно. У жаргоні Unix це означає вихідний код / код повернення, рівний нулю.
command1; command2
виконується command2
після виконання command1
, послідовно. Не має значення, успішні були команди чи ні.
Перша - це проста логіка AND
використовує оцінку короткого замикання, остання просто розмежовує дві команди.
У дійсності відбувається те, що коли перша програма повертає ненульовий код виходу, ціле AND
оцінюється, FALSE
а друга команда не буде виконана. Пізніші просто виконують їх обидва в порядку.