foo() any-command
は、Bourneに似たシェルでサポートされているBourne構文ですがbash、のyash最新バージョンposh(複合コマンドのみをサポート)です。(ただし、BourneシェルおよびAT&Tの実装は、複合コマンドでない限りkshサポートしません)。foo() any-command > redirectionsany-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とzshKornシェルとの互換性のために、それらのシェル(及びもののpdkshKornシェルのベースの変異体は)それを標準構文から任意の異なる扱いません。
function foo () { ...; }
no shell の構文であり、使用するべきではありません。それだけで事故によってサポートされるたまたまbash、yash、zshおよびpdkshKornシェルのベースの変種。ちなみに、それは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を参照してください。