Я читал о && и || и я хотел бы запустить две команды в ложном случае.
Я пытался, ;
но это всегда работает . Я попытался поместить его в фигурные скобки, { command1; command2 }
но это приводит к синтаксической ошибке.
Я хочу сделать что-то вроде
command && echo "Ok, continuing" || echo "Check internet connection"; exit 1
который выходит только если нет подключения к Интернету.
command-line
bash
Томас Веллер
источник
источник
()
и{}
.Ответы:
Использование паренов помещает команды в подоболочку, что не всегда то, что вы хотите. Или используйте фигурные скобки:
Хитрость заключается в том, что, в отличие от паренов, после команды должна следовать заключительная команда в фигурных скобках
;
.Почему точка с запятой или новая строка требуется
Фигурная скобка является действительным аргументом для команды. Например, вот фигурная скобка в качестве аргумента для
echo
:Следовательно, если оболочка видит:
Оболочка интерпретирует command1 как не имеющую аргументов, а command2 как имеющий один аргумент, состоящий из символа
}
. Фигурная скобка}
интерпретируется как закрывающая группировка только в том случае, если она следует за точкой с запятой или переводом строки. Для того, чтобы вышеуказанное работало:Подоболочки и разница между
{...}
и(...)
Обратите внимание, что следующие значения равны
x
10, но этот параметр забыт до выполненияecho
команды:С фигурными скобками, напротив,
x=10
запоминается установка:Разница в том, что назначения переменных в подоболочке не сохраняются после ее завершения.
Документация
От
man bash
:источник