foo() any-command
è la sintassi Bourne supportato da qualsiasi shell Bourne simile ma bash
, yash
e versioni più recenti di posh
(che supportano solo comandi composti). (la shell Bourne e le implementazioni AT&T di ksh
non supportano a foo() any-command > redirections
meno che non any-command
sia un comando composto però).
foo() any-compound-command
(esempi di composti comandi: { cmd; }
, for i do echo "$i"; done
, (cmd)
... l'essere più comunemente utilizzati { ...; }
)
è la sintassi POSIX supportata da qualsiasi shell tipo Bourne e quella che generalmente si desidera utilizzare.
function foo { ...; }
è la sintassi della shell Korn, che precede la sintassi di Bourne. Usa questo solo se scrivi specificatamente per l'implementazione AT&T della shell Korn e hai bisogno del trattamento specifico che riceve lì. Questa sintassi non è POSIX, ma è supportata da bash
, yash
e zsh
per compatibilità con la shell Korn sebbene quelle shell (e le pdksh
varianti basate sulla shell Korn) non la trattino in modo diverso dalla sintassi standard.
function foo () { ...; }
è la sintassi di nessuna shell e non deve essere utilizzata . Succede solo per essere sostenuto da incidente da bash
, yash
, zsh
e le pdksh
varianti base del Korn. Per inciso, è anche la awk
sintassi della funzione.
Se continuiamo a scendere l'elenco esoterico,
function foo() other-compound-command
(come function foo() (subshell)
o function foo() for i do; ... done
) è anche peggio. È supportato da bash
, yash
e zsh
, ma non da ksh, anche dalle pdksh
varianti basate su.
Mentre:
function foo() simple command
è supportato solo da zsh
.
function baz { echo "baz"; }
. Vedi Bashism nella wiki di GreyCat.