foo() any-command
est la syntaxe Bourne supportée par tout shell de type Bourne mais bash, yashet les versions récentes de posh(qui ne supportent que les commandes composées). (Les implémentations de Bourne Shell et d’AT & T kshne prennent pas en charge foo() any-command > redirectionssauf s’il any-commands’agit d’une commande composée).
foo() any-compound-command
(exemples de commandes composé: { cmd; }, for i do echo "$i"; done, (cmd)... l'être le plus couramment utilisé { ...; })
est la syntaxe POSIX prise en charge par tout shell de type Bourne et celui que vous souhaitez généralement utiliser.
function foo { ...; }
est la syntaxe du shell Korn, antérieure à la syntaxe Bourne. Utilisez uniquement celui-ci si vous écrivez spécifiquement pour la mise en œuvre de la coque Korn chez AT & T et si vous avez besoin du traitement spécifique qui y est appliqué. Cette syntaxe n'est pas POSIX, mais est pris en charge par bash, yashet zshpour la compatibilité avec le shell Korn si ces coquilles (et les pdkshvariantes à base de Korn shell) ne traite pas différent de la syntaxe standard.
function foo () { ...; }
est la syntaxe de no shell et ne doit pas être utilisé . Il arrive que d'être pris en charge par accident par bash, yash, zshet les pdkshvariantes à base de Korn shell. Incidemment, c'est aussi la awksyntaxe de la fonction.
Si nous continuons à descendre la liste ésotérique,
function foo() other-compound-command
(comme function foo() (subshell)ou function foo() for i do; ... done) est encore pire. Il est supporté par bash, yashet zshnon pas ksh, même les pdkshvariantes basées sur.
Tandis que:
function foo() simple command
est uniquement supporté par zsh.
function baz { echo "baz"; }. Voir Bashism dans le wiki de GreyCat.