foo() any-command
to składnia Bourne'a obsługiwana przez dowolną powłokę podobną do Bourne'a bash
, yash
a także najnowsze wersje posh
(które obsługują tylko polecenia złożone). (implementacje powłoki Bourne'a i AT&T ksh
nie obsługują, foo() any-command > redirections
chyba że any-command
jest 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
, yash
i zsh
dla kompatybilności z powłoki Korna chociaż te muszle (oraz pdksh
opartych 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
, zsh
a pdksh
wariantach opartych na powłoce Korna. Nawiasem mówiąc, jest to również awk
skł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
, yash
i zsh
, ale nie ksh, nawet pdksh
oparte na wariantach.
Podczas:
function foo() simple command
jest obsługiwany tylko przez zsh
.
function baz { echo "baz"; }
. Zobacz bashowymi w wiki GreyCat użytkownika.