นี่คือรหัสบางอย่างที่ทำสิ่งที่แตกต่างใน POSIX sh และ Bash:
hello &> world
ไม่ว่าจะเป็น "ไม่ถูกต้อง" สำหรับคุณฉันไม่รู้
ในทุบตีก็เปลี่ยนเส้นทางทั้งส่งออกมาตรฐานและข้อผิดพลาดมาตรฐานจากลงในแฟ้มhello
world
ใน POSIX sh
มันจะทำงานhello
ในพื้นหลังจากนั้นทำการเปลี่ยนเส้นทางที่ว่างเปล่าworld
เพื่อตัดทอน (เช่นจะถือว่าเป็น& >
)
มีมากมายของกรณีอื่น ๆ ที่ส่วนขยายทุบตีจะทำสิ่งที่พวกเขาเมื่อทำงานภายใต้อยู่bash
และจะมีผลกระทบที่แตกต่างกันใน sh
POSIX ตัวอย่างเช่นการขยายรั้งเป็นอีกและมันก็ทำงานเหมือนกันภายใต้โหมด POSIX ของ Bash และไม่
ตราบที่ข้อผิดพลาดทางไวยากรณ์คงที่ไป Bash มีทั้งคำสงวน (เช่น[[
และtime
) ไม่ได้ระบุโดย POSIX เช่นที่[[ x
เป็นรหัสเชลล์ POSIX ที่ถูกต้อง แต่ข้อผิดพลาดทางไวยากรณ์ของ Bash และประวัติของข้อบกพร่องที่เข้ากันไม่ได้ POSIXต่างๆเช่นหนึ่งจากคำถามนี้ :
x=$(cat <<'EOF'
`
EOF
)
bash: line 2: unexpected EOF while looking for matching ``'
bash: line 5: syntax error: unexpected end of file
ข้อผิดพลาดทางไวยากรณ์เท่านั้นเป็นคำจำกัดความที่ค่อนข้างอันตรายของ "ไม่ถูกต้อง" สำหรับทุกสถานการณ์ที่มีความสำคัญ แต่ก็มี