Đây là một số mã làm điều gì đó khác biệt trong POSIX sh và Bash:
hello &> world
Cho dù đó là "không hợp lệ" đối với bạn, tôi không biết.
Trong Bash, nó chuyển hướng cả đầu ra tiêu chuẩn và lỗi tiêu chuẩn từ hello
tệp world
. Trong POSIX sh
, nó chạy hello
trong nền và sau đó thực hiện chuyển hướng trống vào world
, cắt bớt nó (nghĩa là nó được coi là & >
).
Có rất nhiều trường hợp khác mà các tiện ích mở rộng Bash sẽ thực hiện công việc của chúng khi chạy bên dưới bash
và sẽ có các hiệu ứng khác nhau trong POSIX thuần túy sh
. Ví dụ, mở rộng cú đúp là một cách khác và nó cũng hoạt động tương tự trong chế độ POSIX của Bash và không.
Theo như lỗi cú pháp tĩnh, Bash có cả các từ dành riêng (như [[
và time
) không được chỉ định bởi POSIX, chẳng hạn như [[ x
mã shell POSIX hợp lệ nhưng là lỗi cú pháp Bash và lịch sử các lỗi không tương thích POSIX khác nhau có thể dẫn đến lỗi cú pháp, chẳng hạn như câu hỏi từ câu hỏi này :
x=$(cat <<'EOF'
`
EOF
)
bash: line 2: unexpected EOF while looking for matching ``'
bash: line 5: syntax error: unexpected end of file
Cú pháp chỉ lỗi là một định nghĩa khá nguy hiểm về "không hợp lệ" cho bất kỳ trường hợp nào có vấn đề, nhưng nó là như vậy.