командний рядок - яка мета &&?
У оболонці, коли бачиш
$ command one && command two
намір полягає в тому, щоб виконати команду, яка слідує за &&єдиною, якщо перша команда успішна. Це ідіоматично для оболонок Посікса, і не тільки вони знайдені в Баші.
Він має намір запобігти запуску другого процесу, якщо перший не вдався.
Ви можете помітити, що я вжив слово "намір" - це з поважних причин. Не всі програми мають однакову поведінку, тому для цього потрібно зрозуміти, що програма вважає "провалом" і як вона справляється з нею, прочитавши документацію та, якщо необхідно, вихідний код.
Ваша оболонка вважає повернене значення 0 істинним, інші додатні числа - хибними
Програми повертають сигнал про вихід. Вони повинні повернути 0, якщо вони успішно вийдуть, або більший за нуль, якщо цього не зробити. Це дозволяє обмежити кількість зв'язку між процесами.
&&Згадуються як AND_IFв граматиці POSIX оболонки , яка є частиною and_orсписку команд, які також включають в себе, ||який є OR_IFз подібною семантикою.
Граматичні символи, цитовані з документації:
%token AND_IF OR_IF DSEMI
/* '&&' '||' ';;' */
І Граматика (також цитується з документації), яка показує, що будь-яку кількість AND_IFs ( &&) та / або OR_IFs ( ||) можна з'єднати (як and_orвизначено рекурсивно):
and_or : pipeline
| and_or AND_IF linebreak pipeline
| and_or OR_IF linebreak pipeline
Обидва оператори мають однаковий пріоритет і оцінюються зліва направо (вони ліво-асоціативні). Як кажуть документи:
AND-ORСписок являє собою послідовність з одного або декількох конвеєрів , розділених операторами "&&"і "||".
Список являє собою послідовність з одного або декількох І-АБО - листи відокремлені один від операторів ';'і '&'і необов'язково припинено ';', '&'або.
Оператори "&&"і "||"мають однаковий пріоритет і повинні бути оцінені з левоассоціатівностью. Наприклад, обидві наступні команди записують виключно бар на стандартний вихід:
$ false && echo foo || echo bar
$ true || echo foo && echo bar
У першому випадку false - це команда, яка закінчується зі статусом 1
$ false
$ echo $?
1
що означає, echo fooщо не працює (тобто короткочасне керуванняecho foo ). Потім команда echo barвиконується.
У другому випадку істинний вихід із кодом 0
$ true
$ echo $?
0
і тому echo fooне виконується, тоді echo barвиконується.
false && echo "Will not be printed".