Определение функции оболочки: почему есть место после открытия скобки?

Вы, наверное, знаете эту вилку :

:(){ :|:&};: #WARNING: harmful code 

Интересно, почему необходимо, чтобы он разбирал, включить пробел после открытия фигурной скобки.

2 Solutions collect form web for “Определение функции оболочки: почему есть место после открытия скобки?”

{}

  { list; } 

Размещение списка команд между фигурными фигурными скобками приводит к тому, что список будет выполнен в текущем контексте оболочки. Не создается подоболочка. Требуется список точек с запятой (или новой строки).

В дополнение к созданию подоболочки существует тонкая разница между этими двумя конструкциями из-за исторических причин. Скобки зарезервированные слова, поэтому они должны быть отделены от списка пробелами или другими метасимволами оболочки. Скобки – это операторы и распознаются как отдельные маркеры оболочкой, даже если они не отделены от списка пробелами.

// источник

Я думаю, что @rush может дать правильный, вводящий в заблуждение ответ. Форк-бомба определяет функцию, называемую « : ». Код в фигурных скобках не выполняется до тех пор, пока функция не вызывается финальным « : ». Таким образом, фигурные скобки как командная группировка и фигурные скобки как тело функции синтаксически одинаковы, но имеют разную семантику.
Из того же документа, что и @rush, цитируется:

Обратите внимание, что по историческим причинам в наиболее распространенном использовании фигурные скобки, которые окружают тело функции, должны быть отделены от тела пробелами или символами новой строки. Это связано с тем, что фигурные скобки являются зарезервированными словами и распознаются только как таковые, когда они отделены от списка команд пробелом или другим метасимволом оболочки. Кроме того, при использовании фигурных скобок список должен быть прерван точкой с запятой, '&' или новой строкой.

  • Как сделать это `echo | Выход bc` будет в той же строке, что и выход эха после?
  • Как получить часть строки в linux
  • Bash: Групповые строки, содержащие одну и ту же подстроку
  • У меня есть команда, не найденная ошибка в моем скрипте оболочки, когда я запускаю код
  • Для вывода weird
  • Окрашивание выхода `cat`?
  • Как создать папку с именем пользователя и датой в качестве имени папки?
  • В то время как проверка состояния JBoss в цикле вниз или нет,
  • Как сгруппировать несколько строк в файле
  • Получить дату последнего дня последнего месяца в сценарии оболочки
  • Я хочу отслеживать файлы, которые обрабатываются в последний час
  • Linux и Unix - лучшая ОС в мире.