ksh และ bash นั้นแตกต่างกันอย่างสิ้นเชิง แต่ไบนารี bash และ sh นั้นส่วนใหญ่จะเหมือนกัน sh ของ OS X เป็นเวอร์ชันของ bash ที่:
- ได้โหมด POSIXเปิดใช้งาน bash ไม่สอดคล้องกับ POSIX โดยค่าเริ่มต้น
- มีพฤติกรรมการเริ่มต้นที่แตกต่างกัน ยกตัวอย่างเช่นไม่ได้อ่าน
sh -l
~/.bash_profile/
- เปิดใช้งาน xpg_echo เป็นค่าเริ่มต้น ดังนั้น
echo
ทำหน้าที่เหมือนecho -e
และไม่สนับสนุนตัวเลือกใด ๆ
FCEDIT เริ่มต้นคือ ed ใน sh แต่ EDITOR หรือ ed ใน bash:
$ diff -y --suppress-common-lines -W 80 <(strings /bin/bash) <(strings /bin/sh)
> /bin/bash
${FCEDIT:-${EDITOR:-ed}} | ${FCEDIT:-ed}
@(#)PROGRAM:bash PROJECT:bash-86.1 | @(#)PROGRAM:sh PROJECT:bash-86.1
$ grep -rF '${FCEDIT:-${EDITOR:-ed}}' ~/Code/Source/bash-86.1/
bash-86.1/bash-3.2/builtins/fc.c:# define POSIX_FC_EDIT_COMMAND "${FCEDIT:-${EDITOR:-ed}}"
bash-86.1/bash-3.2/builtins/fc.def:# define POSIX_FC_EDIT_COMMAND "${FCEDIT:-${EDITOR:-ed}}"
แหล่งที่สามารถดาวน์โหลดได้จากhttp://opensource.apple.com/tarballs/
จากคนทุบตี :
หากมีการเรียกใช้ bash ด้วยชื่อ sh มันจะพยายามเลียนแบบพฤติกรรมการเริ่มต้นของเวอร์ชันประวัติของ sh อย่างใกล้ที่สุดเท่าที่จะทำได้ในขณะที่สอดคล้องกับมาตรฐาน POSIX เช่นกัน
มันไม่ได้จำลองลักษณะอื่น ๆ ของกระสุน Bourne ดั้งเดิม
เชลล์ Bourne ดั้งเดิมไม่ได้รับการดูแลรักษาอีกต่อไปและตอนนี้ / bin / sh ได้ถูกกำหนดให้เป็นเชลล์อื่นที่ตรงกับ POSIX sh ของ OS X อนุญาตให้ใช้bashismsที่ไม่จำเป็นต้องทำงานกับ / bin / sh บนแพลตฟอร์มอื่น ๆ (เช่น dash บน Ubuntu)