Mong đợi của bạn dựa trên DOS Think / Windows Think và sai. Trên MS-DOS, Windows và một số hệ điều hành IBM / Microsoft khác, việc mở rộng ký tự đại diện được thực hiện bằng chính lệnh và những thứ như /a
tùy chọn cho dir
lệnh đóng vai trò là bộ lọc thuộc tính trong quá trình mở rộng ký tự đại diện. dir
mở rộng các ký tự đại diện như *
, mà trình thông dịch lệnh truyền cho nó như hiện tại và nếu /a
được chỉ định, nó sẽ áp dụng các bộ lọc thích hợp cho những gì được trả về. (Trên một số hệ điều hành, các bộ lọc thuộc tính có thể được cung cấp cho lệnh gọi hệ thống để liệt kê một thư mục và nhân hệ điều hành hoặc trình điều khiển hệ thống tệp của nó, áp dụng chính chúng.)
Trên Unices và trên Linux, việc mở rộng ký tự đại diện được thực hiện bởi trình bao và không chú ý đến các quyền. Khi, trong thư mục gốc, bạn làm
ls *
những gì ls
bản thân lệnh nhận được từ shell là gì
ls bin home opt var boot dev tmp vv bị mất + tìm thấy root usr
Những gì -d
/ --directory
tùy chọn làm là tắt những gì thường xảy ra tiếp theo . Điều thường xảy ra tiếp theo là ls
lần lượt xem xét từng đối số của nó, thấy rằng chúng là các thư mục và quyết định liệt kê nội dung của chúng. Đối với các đối số có tên tệp, nó chỉ in ra thông tin cho chính tệp đó. Với -d
tùy chọn, các thư mục được xử lý giống như các tập tin. Vì vậy, ls
in ra thông tin cho từng thư mục được truyền dưới dạng đối số của nó, giống như nó sẽ làm nếu chúng là tệp.
Vì vậy, -d
không phải là một tùy chọn "chỉ in thư mục". Trong thực tế, không chỉ không có lựa chọn như vậy; không thể có một lựa chọn như vậy. Việc mở rộng ký tự đại diện được thực hiện bởi trình bao và sh
ít nhất (trong POSIX ) không có cách nào để trình bày trình bao để kiểm tra quyền và bit loại tệp khi mở rộng *
thành danh sách tên. Để có được danh sách tên của các thư mục một mình, cần phải sử dụng find
lệnh, như được giải thích bởi ztank1013
, hoặc sử dụng thủ thuật mà tên đường dẫn kết thúc bằng dấu gạch chéo ngụ ý mục nhập thư mục .
, như được giải thích bởi Jin
. ( Jin
Trò lừa bịp kết thúc bằng ls
lệnh nhận các đối số
ls bin / home / opt / var / boot / dev / tmp / etc / Mất + tìm thấy / root / usr /
bởi vì mẫu */
trên thực tế khớp tên đường dẫn với hai thành phần, phần thứ hai trống và do đó không hoàn toàn làm những gì mong muốn. Cụ thể, nó sẽ coi các liên kết tượng trưng chỉ đến các thư mục như thể chúng là các thư mục.)
Hành vi ls -d
không có a *
là một phần mở rộng đơn giản ở trên. Một cách đơn giản là phải biết thêm một điều nữa ls
: Khi nó không được đưa ra đối số, nó sẽ thừa nhận một đối số mặc định là .
. Bây giờ mà không cần sự -d
lựa chọn, hành vi nói trên dẫn đến nội dung của thư mục được đặt tên bởi .
được liệt kê và thông tin cho nội dung của nó được hiển thị. Với các -d
tùy chọn, thư mục .
được đối xử giống như thể nó là một tập tin, và các thông tin riêng của mình được hiển thị, chứ không phải là nội dung của nó được liệt kê.