41 votes

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

Je me suis toujours demandé à quoi ils servaient ? Ça semble idiot de les mettre à chaque fois si on ne peut jamais rien mettre dedans.

function_name () {
    #statements
}

Est-ce qu'il y a quelque chose à gagner ou à perdre à mettre la function au début d'une fonction ?

function function_name () {
    #statements
}

56voto

SiegeX Points 32614

Le mot-clé function a été déprécié au profit de function_name() pour la portabilité avec le Spécification POSIX

Une fonction est un nom défini par l'utilisateur qui est utilisé comme une simple commande pour appeler une commande composée avec de nouveaux paramètres positionnels. Une fonction est définie avec une "commande de définition de fonction".

Le format d'une définition de fonction est le suivant :

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

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

Exemple, il s'agit d'une définition et d'une invocation de fonction légale :

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

11voto

Greg Hewgill Points 356191

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

7voto

Ciro Santilli Points 3341

Sans function l'expansion des alias se fait au moment de la définition . Par exemple :

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

Avec function Cependant, l'expansion de l'alias ne se fait 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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X