foo() any-command
est la syntaxe Bourne supportée par tout shell de type Bourne mais bash
, yash
et les versions récentes de posh
(qui ne supportent que les commandes composées). (Les implémentations de Bourne Shell et d’AT & T ksh
ne prennent pas en charge foo() any-command > redirections
sauf s’il any-command
s’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
, yash
et zsh
pour la compatibilité avec le shell Korn si ces coquilles (et les pdksh
variantes à 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
, zsh
et les pdksh
variantes à base de Korn shell. Incidemment, c'est aussi la awk
syntaxe 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
, yash
et zsh
non pas ksh, même les pdksh
variantes 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.