Определение функции Shell: почему там пространство после вводной фигурной скобки?

Нет это не будет начиная с полномочий быть присоединенным к пользователям.

Однако это только принимает простое управление к chmod, файл поэтому просто перемещает его и устанавливает полномочия.

18
13.04.2017, 15:22
2 ответа

{}

          { list; }

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

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

//источник

13
27.01.2020, 19:46
  • 1
    я придрался с Вашим ответом в моем собственном сообщении на этой странице. Это - функция не группировка команды. –  donothingsuccessfully 05.07.2012, 21:46
  • 2
    @donothingsuccessfully тело функции является группировкой команды. –  Gilles 'SO- stop being evil' 06.07.2012, 01:44

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

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

3
27.01.2020, 19:46
  • 1
    Нет, ответ порыва корректен. Фигурные скобки вокруг тела функции являются тем же синтаксическим элементом как тогда, когда они не разграничены тело функции. Посмотрите грамматические правила оболочки: a function_body a compound_command (плюс дополнительное redirect_list). Пространство необходимо потому что { зарезервированное слово, не специальный символ. –  Gilles 'SO- stop being evil' 06.07.2012, 01:43
  • 2
    Да, ответ порыва корректен, как я сказал. Да, они - синтаксически то же, как я сказал. Но brace_groups ведут себя по-другому когда часть функции и если не. Я использовал команду, группирующуюся для описания последнего случая, и это - то, что было описано в ссылке порыва. –  donothingsuccessfully 06.07.2012, 10:00
  • 3
    я не уверен семантическое различие, является значительным здесь, поскольку это - синтаксис, который имеет значение для синтаксического анализатора. Реальный ответ { не оператор, а зарезервированное слово, и слова должны быть разделены от других слов для рассмотрения отличными. –  jw013 31.10.2012, 22:25

Теги

Похожие вопросы