Bash không đối xử với [
hoặc các ]
ký tự (một mình) khác với một chữ cái trong bảng chữ cái.
Trong trường hợp này, bash thấy một "từ" [
và tìm kiếm một lệnh có tên đó. Nếu bạn nhìn vào hệ thống tệp của mình, bạn có thể thấy rằng /bin/[
(hoặc /usr/bin/[
) tồn tại dưới dạng tệp thực thi. Khi điều đó xảy ra, bash cũng cung cấp một phiên bản tích hợp (vì mục đích hiệu quả), nhưng đó chỉ là một chi tiết triển khai.
Các [
lệnh (như trong, thực thi với tên đó), có một quy tắc rằng tham số cuối cùng bạn vượt qua nó nên được ]
hoặc nếu không nó ném một lỗi. Điều này có thể một phần vì nó mang tính thẩm mỹ, nhưng nó cũng phục vụ để bảo vệ bạn khỏi các lệnh vô tình bị cắt ngắn, điều này thật tuyệt.
Thực tế là những điều này không đặc biệt là lý do tại sao bạn không thể bỏ qua khoảng trắng trước và sau [
hoặc ]
.
Ngoại lệ :
- Khi
[
và ]
xảy ra ở định dạng đúng trong cùng một từ, ví dụ: [a-z]
đó là quy tắc kết nối đặc biệt và bash được áp dụng.
- Các
[[
lệnh là đặc biệt và có thể làm nhiều điều [
không thể (và các thông số bên trong [[ .. ]]
được xử lý khác nhau, như là một số ngắt dòng). Tương ứng ]]
cũng đặc biệt, vì nó là một từ dành riêng shell không thể là tên lệnh và chấm dứt xử lý đặc biệt theo [[
từ khóa.
[
đây cũng là một lệnh tự duy trì: -rwxr-xr-x 1 root 39552 ngày 3 tháng 12 lúc 18 giờ 14 phút / usr / bin / [Mặc dù có thể cũng có "song song" tích hợp, giống như có ví dụkill
. Trên một số hệ thống,test
lệnh là một liên kết tượng trưng đến[
hoặc ngược lại. AFAIK,]
không có nghĩa là bất cứ điều gì, nhưng được chấp nhận để "đóng" a[
- nhưng đó là vì lý do "thẩm mỹ".