foo() any-command
は、Bourneに似たシェルでサポートされているBourne構文ですが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)
...最も一般的に使用されています{ ...; }
)
BourneのようなシェルでサポートされているPOSIX構文であり、一般的に使用するものです。
function foo { ...; }
Bourne構文より前のKornシェル構文です。KornシェルのAT&T実装用に特別に記述し、そこで受け取る特定の処理が必要な場合にのみ、これを使用してください。この構文は、POSIXではなく、によってサポートされているbash
、yash
とzsh
Kornシェルとの互換性のために、それらのシェル(及びもののpdksh
Kornシェルのベースの変異体は)それを標準構文から任意の異なる扱いません。
function foo () { ...; }
no shell の構文であり、使用するべきではありません。それだけで事故によってサポートされるたまたま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
ます。
function baz { echo "baz"; }
。GreyCatのwikiのBashismを参照してください。