¿Cuál es la palabra clave ‘función’ utilizada en algunos scripts bash?

Por ejemplo: Bash-Prog-Intro-HOWTO

 función foo () {}

Realizo consultas de búsqueda en info bash y busco en los capítulos de POSIX para la palabra clave de función pero no encuentro nada.

¿Cuál es la palabra clave de function utilizada en algunos scripts bash? ¿Es alguna syntax obsoleta?

La palabra clave function es opcional cuando se define una función en Bash, como se documenta en el manual :

Las funciones se declaran usando esta syntax:

name () compound-command [ redirections ]

o

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

Generalmente, se prefiere la primera forma de syntax porque es compatible con los scripts de Bourne / Korn / POSIX y, por lo tanto, es más portátil.
Dicho esto, a veces es posible que desee utilizar la palabra clave function para evitar que los alias de Bash colisionen con el nombre de su función. Considera este ejemplo:

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

Aquí, 'foo' se reemplaza por el texto del alias del mismo nombre porque es la primera palabra del comando. Con la function el alias no se expande:

  $ function foo() { :; } 

La palabra clave function es necesaria en casos excepcionales cuando el nombre de la función también es un alias. Sin él, Bash expande el alias antes de analizar la definición de la función, probablemente no lo que desea:

 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. 

Con la palabra clave function , las cosas funcionan como se esperaba:

 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. 

La function palabra reservada es opcional. Consulte la sección ‘Definiciones de funciones de shell’ en la página man de bash .