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 { ...; }
є синтаксисом оболонки Корна, який передує синтаксису Борна. Використовуйте цей лише тоді, коли ви пишете спеціально для 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"; }. Дивіться башизм у вікі GreyCat.