foo() any-command
es la sintaxis Bourne apoyado por cualquier shell Bourne-como pero bash
, yash
y las versiones recientes de posh
(que sólo apoyar comandos compuestos). (Las implementaciones de Bourne shell y AT&T ksh
no son compatibles a foo() any-command > redirections
menos que any-command
sea 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
, yash
y zsh
para compatibilidad con el shell Korn, aunque esos shells (y las pdksh
variantes 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
, zsh
y las pdksh
variantes basadas del shell Korn. Por cierto, también es la awk
sintaxis 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
, yash
y zsh
, pero no ksh, incluso las pdksh
variantes basadas.
Mientras:
function foo() simple command
solo es compatible con zsh
.
function baz { echo "baz"; }
. Ver del bash en el wiki de GreyCat.