Par exemple: Bash-Prog-Intro-HOWTO
fonction foo () {}
Je fais des requêtes de recherche dans info bash
et regarde dans les chapitres reloués de POSIX pour le mot-clé de fonction mais rien n’a été trouvé.
Quel est le mot-clé de function
utilisé dans certains scripts bash? Est-ce une syntaxe obsolète?
Le mot-clé function
est facultatif lors de la définition d’une fonction dans Bash, comme indiqué dans le manuel :
Les fonctions sont déclarées en utilisant cette syntaxe:
name () compound-command [ redirections ]
ou
function name [()] compound-command [ redirections ]
La première forme de la syntaxe est généralement préférée car elle est compatible avec les scripts Bourne / Korn / POSIX et donc plus portable.
Cela dit, vous pouvez parfois vouloir utiliser le mot-clé function
pour empêcher les alias Bash d’entrer en collision avec le nom de votre fonction. Considérez cet exemple:
$ alias foo="echo hi" $ foo() { :; } bash: syntax error near unexpected token `('
Ici, 'foo'
est remplacé par le texte de l’alias du même nom car c’est le premier mot de la commande. Avec la function
l’alias n’est pas développé:
$ function foo() { :; }
Le mot-clé function
est nécessaire dans de rares cas lorsque le nom de la fonction est également un alias. Sans elle, Bash développe l’alias avant d’parsingr la définition de la fonction – probablement pas ce que vous voulez:
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.
Avec le mot-clé function
, les choses fonctionnent comme prévu:
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
mot réservé est facultative. Voir la section ‘Définitions des fonctions du shell’ dans la page de manuel bash .