foo() any-command
Синтаксис Борна поддерживается любой Борн-подобной оболочкой , но bash, yashи последние версии posh(которые поддерживают только составные команды). (оболочки Bourne и реализации AT & T kshне поддерживают, foo() any-command > redirectionsесли только any-commandэто не составная команда).
foo() any-compound-command
(примеры соединения команд: { cmd; }, for i do echo "$i"; done, (cmd)... наиболее часто используемый существо { ...; })
является синтаксисом POSIX, поддерживаемым любой подобной Bourne оболочкой, и той, которую вы обычно хотите использовать.
function foo { ...; }
синтаксис оболочки Korn, предшествующий синтаксису Борна. Используйте его, только если вы пишете специально для 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, но не КШ, даже pdksh-На варианты.
Пока:
function foo() simple command
поддерживается только zsh.
function baz { echo "baz"; }. Смотрите Bashism в вики GreyCat.