Khác biệt về hành vi
Một số khác biệt về Bash 4.3.11:
Khuyến cáo : luôn luôn sử dụng [].
Có tương đương POSIX cho mọi [[ ]]cấu trúc tôi đã thấy.
Nếu bạn sử dụng [[ ]]bạn:
- mất tính di động
- buộc người đọc phải tìm hiểu sự phức tạp của một phần mở rộng bash khác.
[chỉ là một lệnh thông thường với một cái tên kỳ lạ, không có ngữ nghĩa đặc biệt nào được tham gia.
Lấy cảm hứng từ [[...]]cấu trúc tương đương trong vỏ Korn
² nhưng không thành công đối với một số giá trị ahoặc b(như +hoặc index) và không so sánh số nếu avà btrông giống như số nguyên thập phân. expr "x$a" '<' "x$b"làm việc xung quanh cả hai.
Và cũng thất bại đối với một số giá trị ahoặc bthích !hoặc (.
Trong bash 3.2 trở lên và cung cấp khả năng tương thích với bash 3.1 không được bật (như với BASH_COMPAT=3.1)
⁵ mặc dù việc nhóm (ở đây với {...;}nhóm lệnh thay vì (...)chạy một lớp con không cần thiết) là không cần thiết vì các toán tử shell ||và &&(trái ngược với toán tử ||và && [[...]]toán tử -o/ -a [toán tử) có quyền ưu tiên như nhau. Như vậy [ a = a ] || [ a = b ] && [ a = b ]sẽ tương đương.
[[với mã đó là tốt và rõ ràng, nhưng hãy nhớ ngày hôm đó khi bạn chuyển tập lệnh của bạn trên hệ thống với vỏ mặc định khôngbashhoặcksh, vv[là xấu hơn, cồng kềnh, nhưng hoạt động nhưAK-47trong mọi tình huống.