Câu trả lời:
Trích dẫn từ phiên bản đặc tả kỹ thuật Unix đơn 2, khối lượng Lệnh và tiện ích ", §2.13.3 :
Nếu tên tệp bắt đầu bằng dấu chấm (
.
) thì khoảng thời gian phải được khớp rõ ràng bằng cách sử dụng dấu chấm làm ký tự đầu tiên của mẫu hoặc ngay sau ký tự gạch chéo. (Vách) Không xác định được liệu một khoảng thời gian rõ ràng trong danh sách khớp biểu thức khung, chẳng hạn như[.abc]
có thể khớp với giai đoạn hàng đầu trong tên tệp hay không.
Không có ngoại lệ nào làm cho giai đoạn thứ hai ..
hoặc chuỗi trống theo sau khoảng thời gian duy nhất .
, không khớp với ký tự đại diện trong .*
. Do đó, tiêu chuẩn nói rằng .*
phù hợp .
và..
, mặc dù nó có thể.
Đoạn văn trên mô tả hành vi của shell ( sh
lệnh). Phần trên glob
hàm thư viện C tham chiếu đoạn này.
Ngôn ngữ hoàn toàn giống nhau trong phiên bản 3 , còn được gọi là POSIX: 2001 và IEEE 1003.1-2001, đây là điều mà hầu hết các hệ thống hiện tại thực hiện.
Dash, bash và ksh93 tuân thủ POSIX. Pdksh và zsh (thậm chí dưới emulate sh
) không.
Trong ksh, bạn có thể .*
bỏ qua .
và ..
bằng cách cài đặt FIGNORE='.?(.)'
, nhưng điều này có tác dụng phụ là tạo *
các tệp dấu chấm. Hoặc bạn có thể đặt FIGNORE='.*'
, nhưng sau đó .*
không khớp với bất cứ thứ gì.
Trong bash, bạn có thể .*
bỏ qua .
và ..
bằng cách cài đặt GLOBIGNORE='.:..'
, nhưng điều này có tác dụng phụ là tạo *
các tệp dấu chấm. Hoặc bạn có thể đặt GLOBIGNORE='.*'
, nhưng sau đó .*
không khớp với bất cứ thứ gì.
Có lẽ bạn có nghĩa là các chức năng trong bash mở rộng về globalignore. Theo mặc định, bash mở rộng phù hợp. và .. nhưng đọc người đàn ông:
The GLOBIGNORE shell variable may be used to restrict the set of file names matching
a pattern. If GLOBIGNORE is set, each matching file name that also matches one of
the patterns in GLOBIGNORE is removed from the list of matches. The file names ``.''
and ``..'' are always ignored when GLOBIGNORE is set and not null. However, setting
GLOBIGNORE to a non-null value has the effect of enabling the dotglob shell option,
so all other file names beginning with a ``.'' will match. To get the old behavior
of ignoring file names beginning with a ``.'', make ``.*'' one of the patterns in
GLOBIGNORE. The dotglob option is disabled when GLOBIGNORE is unset.
Bạn có thể đặt biến GLOBIGNORE=.:..
để khi bạn thực hiện một cái gì đó như thế này:
rm -r * .*
bạn chỉ xóa thư mục hiện tại. Tiêu chuẩn POSIX chỉ xác định điều đó. là thư mục hiện tại và .. trong thư mục mẹ của thư mục hiện tại. Ý nghĩa đặc biệt của. * Được diễn giải bằng bash hoặc các shell khác (hoặc các chương trình như grep).
Trang con người Linux tham khảo POSIX.2, 3.13.
man
, man glob
hoặc các trang man phải có mặt không? Tôi không thể tìm thấy người đàn ông ở đây (tôi ngạc nhiên).
Theo như tôi có thể nói, LSB 4.1 không yêu cầu bash
và chỉ sh
.
Đối với sh
nó theo POSIX (với một phần mở rộng không liên quan nhỏ).
bash
không phải lúc nào cũng tuân thủ POSIX. chỉ khi nó được gọi làsh
.