foo() any-command
è la sintassi Bourne supportato da qualsiasi shell Bourne simile ma bash, yashe versioni più recenti di posh(che supportano solo comandi composti). (la shell Bourne e le implementazioni AT&T di kshnon supportano a foo() any-command > redirectionsmeno che non any-commandsia 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, yashe zshper compatibilità con la shell Korn sebbene quelle shell (e le pdkshvarianti 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, zshe le pdkshvarianti base del Korn. Per inciso, è anche la awksintassi 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, yashe zsh, ma non da ksh, anche dalle pdkshvarianti basate su.
Mentre:
function foo() simple command
è supportato solo da zsh.
function baz { echo "baz"; }. Vedi Bashism nella wiki di GreyCat.