foo() any-command
to składnia Bourne'a obsługiwana przez dowolną powłokę podobną do Bourne'a bash, yasha także najnowsze wersje posh(które obsługują tylko polecenia złożone). (implementacje powłoki Bourne'a i AT&T kshnie obsługują, foo() any-command > redirectionschyba że any-commandjest to polecenie złożone).
foo() any-compound-command
(Przykłady związku Polecenia: { cmd; }, for i do echo "$i"; done, (cmd)... najczęściej są stosowane w { ...; })
to składnia POSIX obsługiwana przez dowolną powłokę podobną do Bourne'a i ta, której ogólnie chcesz używać.
function foo { ...; }
to składnia powłoki Korna, która poprzedza składnię Bourne'a. Używaj go tylko wtedy, gdy piszesz specjalnie dla implementacji AT&T powłoki Korn i potrzebujesz specjalnego traktowania, które tam otrzyma. Że składnia POSIX nie jest, ale jest wspierany przez bash, yashi zshdla kompatybilności z powłoki Korna chociaż te muszle (oraz pdkshopartych warianty Korn shell) nie traktować go różni od standardowej składni.
function foo () { ...; }
jest składnią braku powłoki i nie należy jej używać . To tylko dzieje się przez przypadek wspierane przez bash, yash, zsha pdkshwariantach opartych na powłoce Korna. Nawiasem mówiąc, jest to również awkskładnia funkcji.
Jeśli będziemy nadal schodzić po liście ezoterycznej,
function foo() other-compound-command
(jak function foo() (subshell)lub function foo() for i do; ... done) jest jeszcze gorszy. Jest obsługiwany przez bash, yashi zsh, ale nie ksh, nawet pdkshoparte na wariantach.
Podczas:
function foo() simple command
jest obsługiwany tylko przez zsh.
function baz { echo "baz"; }. Zobacz bashowymi w wiki GreyCat użytkownika.