Каково ключевое слово ‘function’, используемое в некоторых сценариях bash?

Например: Bash-Prog-Intro-HOWTO

 функция foo () {}

Я делаю поисковые запросы в info bash и смотрю в releted главы POSIX для ключевого слова function, но ничего не найдено.

Что такое ключевое слово function используемое в некоторых сценариях bash? Это какой-то устаревший синтаксис?

Ключевое слово function является необязательным при определении функции в Bash, как описано в руководстве :

Функции объявляются с использованием этого синтаксиса:

name () compound-command [ redirections ]

или

function name [()] compound-command [ redirections ]

Первая форма синтаксиса обычно предпочтительнее, потому что она совместима с сценариями Bourne / Korn / POSIX и поэтому более переносима.
Тем не менее иногда вам может понадобиться использовать ключевое слово function чтобы предотвратить слияние псевдонимов Bash с именем вашей функции. Рассмотрим этот пример:

 $ alias foo="echo hi" $ foo() { :; } bash: syntax error near unexpected token `(' 

Здесь 'foo' заменяется текстом псевдонима с тем же именем, потому что это первое слово команды. С function псевдоним не расширяется:

  $ function foo() { :; } 

Ключевое слово function необходимо в редких случаях, когда имя функции также является псевдонимом. Без него Bash расширяет псевдоним до parsingа определения функции – вероятно, не то, что вы хотите:

 alias mycd=cd mycd() { cd; ls; } # Alias expansion turns this into cd() { cd; ls; } mycd # Fails. bash: mycd: command not found cd # Uh oh, infinite recursion. 

С ключевым словом function все работает по назначению:

 alias mycd=cd function mycd() { cd; ls; } # Defines a function named mycd, as expected. cd # OK, goes to $HOME. mycd # OK, goes to $HOME. \mycd # OK, goes to $HOME, lists directory contents. 

Зарезервированная function слова является необязательной. См. Раздел «Определения функций оболочки» на странице руководства bash .

Interesting Posts
Давайте будем гением компьютера.