Вы, вероятно, знаете об этомвилочная бомба:
:(){ :|:&};: #WARNING: harmful code
Интересно, почему для его разбора необходимо добавлять пробел после открывающейся фигурной скобки.
решение1
{}
{ list; }
Размещение списка команд в фигурных скобках приводит к выполнению списка в текущем контексте оболочки. Подоболочка не создается. Точка с запятой (или новая строка) после списка обязательна.
Помимо создания подоболочки, между этими двумя конструкциями есть тонкое различие по историческим причинам. Фигурные скобки — это зарезервированные слова, поэтому они должны быть отделены от списка пробелами или другими метасимволами оболочки. Скобки — это операторы, и оболочка распознает их как отдельные токены, даже если они не отделены от списка пробелами.
//источник
решение2
Я думаю, что @rush может дать здесь правильный, хотя и вводящий в заблуждение ответ. Форк-бомба определяетфункцияназывается " :
". Код в фигурных скобках не выполняется до тех пор, пока функция не будет вызвана финальным " :
". Таким образом, фигурные скобки какгруппировка команди фигурные скобки кактело функциисинтаксически одинаковы, но имеют разную семантику.
Из того жедокументкак цитирует @rush:
Обратите внимание, что по историческим причинам в наиболее распространенном использовании фигурные скобки, которые окружают тело функции, должны быть отделены от тела пробелами или символами новой строки. Это связано с тем, что фигурные скобки являются зарезервированными словами и распознаются как таковые только тогда, когда они отделены от списка команд пробелом или другим метасимволом оболочки. Кроме того, при использовании фигурных скобок список должен быть завершен точкой с запятой, символом '&' или символом новой строки.