foo() any-command
เป็นไวยากรณ์บอร์นได้รับการสนับสนุนโดยใด ๆ บอร์นเชลล์เหมือน แต่bash, yashและรุ่นล่าสุดposh(ซึ่งสนับสนุนเพียงคำสั่งผสม) (เชลล์เป้าหมายและการใช้งาน AT&T ที่kshไม่สนับสนุนfoo() any-command > redirectionsเว้นแต่any-commandเป็นคำสั่งผสม)
foo() any-compound-command
(ตัวอย่างของสารประกอบคำสั่ง: { cmd; }, for i do echo "$i"; done, (cmd)... ถูกนำมาใช้กันมากที่สุด{ ...; })
เป็นไวยากรณ์ POSIX ที่ได้รับการสนับสนุนโดยเชลล์ที่มีลักษณะคล้ายบอร์นใด ๆ และหนึ่งที่คุณต้องการใช้โดยทั่วไป
function foo { ...; }
คือไวยากรณ์ Korn เชลล์ซึ่งมีอยู่ในไวยากรณ์ Bourne ใช้อันนี้เฉพาะเมื่อเขียนโดยเฉพาะสำหรับการปรับใช้ AT&T ของ Korn เชลล์และต้องการการรักษาเฉพาะที่ได้รับ ไวยากรณ์ที่ไม่ POSIX แต่ได้รับการสนับสนุนโดยbash, yashและzshเพื่อให้เข้ากับเปลือกกรแม้ว่าหอยเหล่านั้น (และpdkshสายพันธุ์ชั่นของเปลือกกร) ไม่รักษามันแตกต่างจากรูปแบบมาตรฐาน
function foo () { ...; }
ไวยากรณ์ของไม่มีเปลือกและไม่ควรนำมาใช้ มันจะเกิดขึ้นได้รับการสนับสนุนจากอุบัติเหตุโดยbash, yash, zshและpdkshตัวแปรตามของเปลือกกร บังเอิญมันเป็น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