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ị a
hoặc b
(như +
hoặc index
) và không so sánh số nếu a
và b
trô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ị a
hoặc b
thí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ôngbash
hoặcksh
, vv[
là xấu hơn, cồng kềnh, nhưng hoạt động nhưAK-47
trong mọi tình huống.