foo() any-command
là cú pháp Bourne hỗ trợ bởi bất kỳ shell Bourne giống như nhưng bash, yashvà 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 kshkhông hỗ trợ foo() any-command > redirectionstrừ khi đó any-commandlà 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, yashvà zshđể tương thích với Korn shell mặc dù những vỏ (và các pdkshbiế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, zshvà các pdkshbiến thể dựa của Korn shell. Ngẫu nhiên, đó cũng là awkcú 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, yashvà zsh, nhưng không phải ksh, ngay cả các pdkshbiế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.