Ответы:
{}
{ list; }
Помещение списка команд в фигурные скобки приводит к тому, что список выполняется в текущем контексте оболочки. Никакая подоболочка не создана. Точка с запятой (или новая строка) следующий список обязателен.
В дополнение к созданию подоболочки, между этими двумя конструкциями есть небольшая разница по историческим причинам. Скобки являются зарезервированными словами, поэтому они должны быть отделены от списка пробелами или другими метасимволами оболочки. Круглые скобки являются операторами и распознаются оболочкой как отдельные токены, даже если они не отделены от списка пробелами.
// источник
Я думаю, что @rush может дать правильный, если вводит в заблуждение ответ здесь. Вилочная бомба определяет функцию под названием " :
". Код в фигурных скобках не выполняется, пока функция не будет вызвана окончанием " :
". Таким образом, фигурные скобки как группировка команд и фигурные скобки как тело функции синтаксически одинаковы, но имеют разную семантику.
Из того же документа, что и @rush, цитирует:
Обратите внимание, что по историческим причинам в большинстве случаев фигурные скобки, окружающие тело функции, должны быть отделены от тела пробелами или символами новой строки. Это связано с тем, что фигурные скобки являются зарезервированными словами и распознаются как таковые только в том случае, если они отделены от списка команд пробелом или другим метасимволом оболочки. Кроме того, при использовании фигурных скобок список должен заканчиваться точкой с запятой, символом «&» или переводом строки.
function_body
- это compound_command
(плюс необязательно redirect_list
). Пробел необходим, потому что {
это зарезервированное слово, а не специальный символ.
brace_group
ведут себя по-разному, когда часть функции, а когда нет. Я использовал группировку команд для описания последнего случая, и это было описано в ссылке Rush.
{
это не оператор, а зарезервированное слово, и слова должны быть отделены от других слов, чтобы считаться отличимыми.