À quoi servent les parenthèses dans la définition d'une fonction de script shell bash comme "f () {}"? Est-ce différent du mot-clé "fonction"?

je me suis toujours demandé à quoi ils servaient? Ça semble idiot de les mettre à chaque fois si on ne peut jamais y mettre quoi que ce soit.

function_name () {
    #statements
}

il y a aussi quelque chose à gagner/perdre en mettant le function mot clé au début d'une fonction?

function function_name () {
    #statements
}
34

3 réponses

Le mot-clé function a été déprécié en faveur de function_name() pour la portabilité avec l' POSIX spec

Une fonction est un nom défini par l'utilisateur qui est utilisé comme une simple commande pour appeler un commandement composé avec une nouvelle position paramètre. Une fonction est définie avec une "commande de définition de fonction".

Le format d'une définition de fonction la commande est la suivante:

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

Notez que { } ne sont pas obligatoires, donc si vous n'allez pas utiliser le mot clé function (et vous ne devriez pas), puis le () sont nécessaires pour que l'analyseur sache que vous définissez une fonction.

Exemple, c'est une fonction juridique de la définition et de l'invocation:

$ myfunc() for arg; do echo "$arg"; done; myfunc foo bar
foo
bar
45
répondu SiegeX 2011-01-11 06:23:48

les parenthèses vides sont nécessaires dans votre premier exemple pour que bash sache que c'est une définition de fonction (sinon ça ressemble à une commande ordinaire). Dans le deuxième exemple, le () est facultatif car vous avez utilisé function.

10
répondu Greg Hewgill 2011-01-11 06:09:04

Sans function, l'extension d'alias se produit au moment de la définition. E. g.:

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

function cependant, l'extension d'alias ne se produit pas au moment de la définition, donc l'alias "cache" la définition:

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