Theo như tôi biết, [[
là một phiên bản nâng cao của [
, nhưng tôi bối rối khi tôi xem đó [[
là một từ khóa và [
được hiển thị dưới dạng dựng sẵn.
[root@server ~]# type [
[ is a shell builtin
[root@server ~]# type [[
[[ is a shell keyword
TLDP nói
Nội dung có thể là từ đồng nghĩa với lệnh hệ thống cùng tên, nhưng Bash tái hiện nó bên trong. Ví dụ, lệnh Bash echo không giống với / bin / echo, mặc dù hành vi của chúng gần như giống hệt nhau.
và
Từ khóa là một từ dành riêng, mã thông báo hoặc toán tử. Từ khóa có ý nghĩa đặc biệt với shell và thực sự là các khối xây dựng theo cú pháp của shell. Như ví dụ, cho, trong khi, làm, và! là những từ khóa. Tương tự như một nội trang, một từ khóa được mã hóa cứng vào Bash, nhưng không giống như một nội dung, một từ khóa không phải là một lệnh, mà là một tiểu đơn vị của một cấu trúc lệnh. [2]
Không nên làm cả hai [
và [[
một từ khóa? Có bất cứ điều gì mà tôi đang thiếu ở đây? Ngoài ra, liên kết này xác nhận lại rằng cả hai [
và [[
nên thuộc cùng một loại.
if "[" $x -eq 3 ]
làm việc như mong đợi (vì Bash tìm kiếm lệnh gọi [
, và điều này tồn tại), nhưng if "[[" $x -eq 3 ]]
không không làm việc (vì một lần nữa Bash tìm kiếm một lệnh của tên thích hợp, nhưng không có [[
chỉ huy).
/usr/bin/echo
, nhưng điều đó không có nghĩa là nó không phải là nội dung .