Використання parenns додає команди в підрозділ, який не завжди є тим, що ви хочете. Як варіант, використовуйте фігурні брекети:
command && echo "Ok, continuing" || { echo "Check internet connection"; exit 1; }
Хитрість тут полягає в тому, що, на відміну від паронів, слід виконувати остаточну команду в дужках ;.
Чому потрібна крапка з комою або новою лінією
Фігурна дужка - коректний аргумент команди. Наприклад, ось фігурна дужка як аргумент echo:
$ echo }
}
Отже, якщо оболонка бачить:
{ command1; command2 }
Оболонка інтерпретує команду1 як відсутність аргументів, а команда2 як один аргумент, що складається з символу }. Фігурна дужка }інтерпретується як закриття угруповання лише в тому випадку, якщо вона слідує крапці з комою або новою лінією. Щоб зробити вищезгадану роботу:
{ command1; command2; }
Абонементи та різниця між {...}та(...)
Зауважте, що наступні набори xдо 10, але що це налаштування забуте перед запуском echoкоманди:
$ x=0; false || ( echo Hello; x=10 )
Hello
$ echo $x
0
З фігурними брекетами, навпаки, x=10пам'ятається настройка :
$ x=0; false || { echo Hello; x=10; }
Hello
$ echo $x
10
Різниця полягає в тому, що змінні присвоєння в передній оболонці не виживають після того, як допоміжна частина завершиться.
Документація
Від man bash:
(список)
список виконується в середовищі додаткової оболонки (див. КОМАНДУ ВИКОНАВЧОГО ЕКОЛОГІЇ нижче). Змінні призначення та вбудовані команди, які впливають на середовище оболонки, не залишаються в силі після завершення команди. Статус повернення - це статус виходу зі списку.
{список; }
список просто виконується в поточному середовищі оболонки. список повинен бути завершений новим рядком або крапкою з комою. Це відомо як команда групи. Статус повернення - це статус виходу зі списку. Зауважте, що на відміну від метахарактерів (і), {і} є зарезервованими словами і повинні виникати там, де дозволено розпізнавати зарезервоване слово. Оскільки вони не викликають розрив слова, їх потрібно відокремити від списку пробілом або іншим метахарактером оболонки.
[Наголос додано]
()та{}.