foo() any-command
是通过任何类似Bourne壳,但支持了Bourne语法bash
,yash
以及最新版本posh
(其仅支持化合物命令)。(除非是复合命令,否则ksh
不支持Bourne shell和AT&T实现)。foo() any-command > redirections
any-command
foo() any-compound-command
(化合物的实例命令:{ cmd; }
,for i do echo "$i"; done
,(cmd)
...最常用的感{ ...; }
)
是任何类似Bourne的外壳以及您通常要使用的外壳所支持的POSIX语法。
function foo { ...; }
是Korn shell语法,它早于Bourne语法。仅在专门为Korn shell的AT&T实现编写并且需要在那里接受特定处理的情况下,才使用此代码。该语法不是POSIX,但受POSIX支持bash
,yash
并zsh
与Korn Shell兼容,尽管这些Shell(以及pdksh
Korn Shell 的- 基于-的变体)与标准语法没有任何区别。
function foo () { ...; }
是no shell 的语法,不应使用。它只是碰巧偶然的支持bash
,yash
,zsh
和pdksh
Korn shell中的基础变种。顺便说一句,它也是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"; }
。见Bashism在GreyCat的wiki。