Tên tập tin Shell và biểu thức chính quy sử dụng một số ký tự giống nhau và chúng có cùng mục đích, nhưng bạn nói đúng, chúng không tương thích. Tên tập tin Globing là một hệ thống ít mạnh mẽ hơn nhiều.
Trong tên tập tin globalbing:
Nhưng trong regexes, bạn phải sử dụng .*
có nghĩa là "không hoặc nhiều ký tự" và .
có nghĩa là "bất kỳ ký tự đơn lẻ nào". A ?
có nghĩa là một cái gì đó khá khác nhau trong regexes: zero hoặc một thể hiện của phần tử RE trước đó.
Dấu ngoặc vuông ( []
) dường như hoạt động giống nhau trong cả hai hệ thống trên hệ thống Tôi đang gõ cái này trên, đối với các trường hợp đơn giản ít nhất. Điều này bao gồm những thứ như các lớp ký tự POSIX (ví dụ [:alpha:]
). Điều đó nói rằng, nếu bạn cần các lệnh của mình để hoạt động trên nhiều loại hệ thống khác nhau, tôi khuyên bạn không nên sử dụng bất cứ thứ gì ngoài những thứ cơ bản như danh sách các ký tự (ví dụ:[abeq]
) và có thể các phạm vi ký tự (ví dụ [a-c]
).
Những khác biệt này có nghĩa là hai hệ thống chỉ có thể thay thế trực tiếp cho các trường hợp đơn giản. Nếu bạn cần kết hợp regex của tên tệp, bạn cần thực hiện theo cách khác. find -regex
là một lựa chọn. (Lưu ý rằng nhân tiện cũng find -name
sử dụng cú pháp toàn cầu.)