foo() any-command
синтаксис Bourne, поддерживаемый любой подобной Границе оболочкой, но
bash
,yash
и последние версииposh
(которые только поддерживают составные команды). (реализации Оболочки Bourne и AT&Tksh
не поддерживатьfoo() any-command > redirections
еслиany-command
составная команда хотя).foo() any-compound-command
(примеры составных команд:
{ cmd; }
,for i do echo "$i"; done
,(cmd)
... обычно используемое существо{ ...; }
)синтаксис POSIX, поддерживаемый любой подобной Границе оболочкой и той, которую Вы обычно хотите использовать.
function foo { ...; }
синтаксис оболочки Korn, который предшествует синтаксису Bourne. Только используйте этого, если запись специально для реализации AT&T Korn окружает и нуждается в определенном лечении, которое это проходит там. Тот синтаксис не является POSIX, но поддерживается
bash
,yash
иzsh
поскольку совместимость с Korn окружает хотя те оболочки (иpdksh
- основанные варианты оболочки Korn), не рассматривают его несколько отличающийся от стандартного синтаксиса.function foo () { ...; }
синтаксис никакой оболочки и не должен использоваться. Это только, оказывается, поддерживается случайно
bash
,yash
,zsh
иpdksh
основанные варианты оболочки Korn. Кстати, это такжеawk
синтаксис функций.Если мы продолжаем спускаться по тайному списку,
function foo() other-compound-command
(как
function foo() (subshell)
илиfunction foo() for i do; ... done
) еще хуже. Это поддерживаетсяbash
,yash
иzsh
, но не ksh, дажеpdksh
- основанные варианты.В то время как:
function foo() simple command
только поддерживается
zsh
.