with script functions declaring linux bash function parentheses

script - function linux bash



¿Para qué se utilizan los paréntesis en una definición de función de script bash shell como "f(){}"? ¿Es diferente a usar la palabra clave "función"? (3)

La function palabra clave ha quedado en desuso en favor de function_name() para la portabilidad con la especificación POSIX

Una función es un nombre definido por el usuario que se utiliza como un simple comando para llamar a un comando compuesto con nuevos parámetros posicionales. Una función se define con un "comando de definición de función".

El formato de un comando de definición de función es el siguiente:

fname() compound-command[io-redirect ...]

Tenga en cuenta que { } no son obligatorios, por lo que si no va a utilizar la function palabra clave (y no debería), entonces () son necesarios para que el analizador sepa que está definiendo una función.

Ejemplo, esta es una definición e invocación de función legal:

$ myfunc() for arg; do echo "$arg"; done; myfunc foo bar foo bar

Siempre me he preguntado para qué se usan? Parece una tontería ponerlos en todo momento si nunca puedes poner algo dentro de ellos.

function_name () { #statements }

¿También hay algo que ganar / perder con poner la palabra clave de function al comienzo de una función?

function function_name () { #statements }


Los paréntesis vacíos son necesarios en su primer ejemplo para que bash sepa que es una definición de función (de lo contrario, parece un comando ordinario). En el segundo ejemplo, el () es opcional porque has usado la function .


Sin function , la expansión de alias ocurre en el momento de la definición . P.ej:

alias a=b # Gets expanded to "b() { echo c; }" : a() { echo c; } b # => c # Gets expanded to b: a # => c

Sin embargo, con la function , la expansión del alias no ocurre en el momento de la definición, por lo que el alias "oculta" la definición:

alias a=b function a { echo c; } b # => command not found # Gets expanded to b: a # => command not found unalias a a # => c