Các tệp nhị phân thú vị trong hệ thống Unix
- Trong hệ thống Unix có những tệp nhị phân mà tên chỉ là một ký hiệu đơn lẻ.
- Khi chạy lệnh
/bin/[, có thể thấy một chương trình mang tên[. [vàtestcùng trỏ tới một tệp nhị phân, và hai lệnh này thực tế thực hiện cùng một chức năng.
Cách dùng chương trình test và [
- Chương trình
testđược dùng để đánh giá biểu thức trong shell. - Nó được dùng để so sánh chuỗi, so sánh số, kiểm tra điều kiện tệp, v.v.
testnhận đối số để đánh giá biểu thức, và trả về 0 nếu đúng, 1 nếu sai.
Lý do tồn tại của hai lệnh
- Lý do tồn tại cả hai lệnh
testvà[không thật sự rõ ràng, nhưng có thể đoán là để tăng tính dễ đọc. - Dùng lệnh
[có thể biểu diễn câu lệnh điều kiện gọn gàng hơntest. - Khi dùng
[, đối số cuối cùng của lệnh phải kết thúc bằng].
Khác biệt giữa lệnh built-in và tệp nhị phân bên ngoài
- Vì
testvà[thường được dùng trong shell script, nên trong hầu hết shell chúng được cài đặt như lệnh built-in. - Khi dùng built-in và tệp nhị phân bên ngoài, hành vi có thể khác nhau, và sự khác biệt này cũng có thể thay đổi tùy theo shell.
Cách dùng [[ và điểm khác biệt
[[là một mở rộng của Bash dùng để thay thế cách dùng[.- Với vai trò là lệnh built-in,
[[có thể thay đổi các quy tắc cơ bản của ngôn ngữ bên trong biểu thức. - Khi so sánh chuỗi,
[[xử lý glob pattern như ký tự nguyên văn, nên có thể cho ra kết quả khác.
Lựa chọn khi viết shell script
- Khi viết shell script có tính di động, nên dùng
[. - Nếu viết script chỉ dành cho Bash, dùng
[[sẽ cung cấp nhiều tính năng hơn.
Kết hợp biểu thức shell và biểu thức test
- Shell có các biểu thức riêng thông qua các toán tử
!,&&,||. - Có thể kết hợp biểu thức
testvà biểu thức shell thành một lệnh duy nhất.
Ý kiến của GN⁺
Điểm quan trọng nhất của bài viết này là trong hệ thống Unix, [ và test tồn tại như hai lệnh khác nhau nhưng thực hiện cùng một chức năng, và điều này được cho là nhằm cải thiện tính dễ đọc và hiệu quả của shell script. Thông tin này có thể hữu ích cho các kỹ sư phần mềm mới bắt đầu khi viết hoặc đọc shell script, đồng thời giúp hiểu rõ hơn nguyên lý hoạt động của shell script và sự khác biệt giữa các shell khác nhau. Điều khiến bài viết này thú vị là nó cho thấy các công cụ nền tảng của shell script có thể được sử dụng dưới nhiều hình thức khác nhau như thế nào, đồng thời làm nổi bật sự phức tạp và tính linh hoạt của lập trình shell.
1 bình luận
Ý kiến trên Hacker News
Lời cảm ơn từ tác giả gốc và đề xuất sửa tiêu đề
Lịch sử của lệnh "test" trong Bourne shell và sở thích cá nhân
Ví dụ về câu lệnh điều kiện không dùng khối
ifCách kết hợp khối
ifvới lệnh thông thườngBăn khoăn về việc dùng toán tử logic trong lệnh
testLợi ích của việc dùng lệnh "test" và sự tiện lợi của "man test"
Lưu ý về hành vi của
[vàtestkhi chỉ có một đối sốSự khác biệt giữa
/bin/[và/bin/testtrên Linux và NetBSDChia sẻ liên kết blog để tìm hiểu sâu hơn về
test/[/[[và những điều kỳ lạ của shellChỉ ra rằng
[[là riêng của bash và khuyên dùng[[nếu chắc chắn đang dùng bashSự bối rối khi nhận ra
[không phải là một phần của ngôn ngữ script bashQuan điểm mạnh về shell và sự phản đối việc dùng
[