Quel est le mot clé ‘function’ utilisé dans certains scripts bash?

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 .