foo() any-command
es la sintaxis Bourne apoyado por cualquier shell Bourne-como pero bash, yashy las versiones recientes de posh(que sólo apoyar comandos compuestos). (Las implementaciones de Bourne shell y AT&T kshno son compatibles a foo() any-command > redirectionsmenos que any-commandsea un comando compuesto).
foo() any-compound-command
(ejemplos de compuesto comandos: { cmd; }, for i do echo "$i"; done, (cmd)... el ser más utilizada { ...; })
es la sintaxis POSIX compatible con cualquier shell similar a Bourne y la que generalmente desea usar.
function foo { ...; }
es la sintaxis de shell Korn, que es anterior a la sintaxis de Bourne. Use este solo si escribe específicamente para la implementación de AT&T del shell Korn y necesita el tratamiento específico que recibe allí. Esa sintaxis no es POSIX, pero es compatible con bash, yashy zshpara compatibilidad con el shell Korn, aunque esos shells (y las pdkshvariantes basadas en el shell Korn) no lo tratan de manera diferente a la sintaxis estándar.
function foo () { ...; }
es la sintaxis de no shell y no debe usarse . Esto sólo ocurre con el apoyo de accidente por bash, yash, zshy las pdkshvariantes basadas del shell Korn. Por cierto, también es la awksintaxis de la función.
Si continuamos bajando por la lista esotérica,
function foo() other-compound-command
(me gusta function foo() (subshell)o function foo() for i do; ... done) es aún peor. Es compatible con bash, yashy zsh, pero no ksh, incluso las pdkshvariantes basadas.
Mientras:
function foo() simple command
solo es compatible con zsh.
function baz { echo "baz"; }. Ver del bash en el wiki de GreyCat.