foo() any-command
là cú pháp Bourne hỗ trợ bởi bất kỳ shell Bourne giống như nhưng bash
, yash
và các phiên bản gần đây của posh
(mà chỉ hỗ trợ các lệnh ghép). (shell Bourne và các triển khai AT & T ksh
không hỗ trợ foo() any-command > redirections
trừ khi đó any-command
là lệnh ghép).
foo() any-compound-command
(ví dụ về hợp chất lệnh: { cmd; }
, for i do echo "$i"; done
, (cmd)
... những con người thường được sử dụng nhất { ...; }
)
là cú pháp POSIX được hỗ trợ bởi bất kỳ shell nào giống Bourne và là cú pháp bạn thường muốn sử dụng.
function foo { ...; }
là cú pháp shell Korn, trước cú pháp Bourne. Chỉ sử dụng cái này nếu viết riêng cho việc triển khai AT & T của vỏ Korn và cần xử lý cụ thể mà nó nhận được ở đó. Cú pháp đó không phải là POSIX, nhưng được hỗ trợ bởi bash
, yash
và zsh
để tương thích với Korn shell mặc dù những vỏ (và các pdksh
biến thể dựa trên của vỏ Korn) không đối xử với nó bất kỳ khác với cú pháp chuẩn.
function foo () { ...; }
là cú pháp không có vỏ và không nên được sử dụng . Nó chỉ xảy ra để được hỗ trợ một cách tình cờ bởi bash
, yash
, zsh
và các pdksh
biến thể dựa của Korn shell. Ngẫu nhiên, đó cũng là awk
cú pháp chức năng.
Nếu chúng ta tiếp tục đi xuống danh sách bí truyền,
function foo() other-compound-command
(thích function foo() (subshell)
hoặc function foo() for i do; ... done
) thậm chí còn tồi tệ hơn. Nó được hỗ trợ bởi bash
, yash
và zsh
, nhưng không phải ksh, ngay cả các pdksh
biến thể dựa trên.
Trong khi:
function foo() simple command
chỉ được hỗ trợ bởi zsh
.
function baz { echo "baz"; }
. Xem Bashism trong wiki của GreyCat.