Câu trả lời:
Một quả cầu không được trích dẫn sẽ được mở rộng bởi shell trước khi findđược thực thi. (Tham khảo Mở rộng tên tệp trong hướng dẫn.)
Nói như vậy:
find . -name *.pyc -delete
sẽ thực sự thực thi:
find . -name file1.pyc file2.pyc file3.pyc -delete
giả sử có 3 tệp .pyc trong thư mục hiện tại và dẫn đến lỗi thay thế.
Dấu gạch chéo ngược làm cho lớp vỏ vượt qua toàn cầu find, nghĩa là nó hoạt động như thể *.pycđược trích dẫn.
Tốt nhất, bạn nên trích dẫn một quả địa cầu:
find . -name '*.pyc' -delete
Trước khi shell của bạn phát findlệnh, nó sẽ thực hiện các mở rộng khác nhau . Làm như vậy, nó cũng xử lý các ký tự đặc biệt (hoặc, các ký tự có ý nghĩa đặc biệt), trong đó *ký tự đại diện - ký tự toàn cầu. Đây là cái gọi là mở rộng tên tệp.
Giả sử bạn có hai tệp trong thư mục của mình:
foo.pycbar.pycSau đó *.pycsẽ mở rộng sang cả hai tên. Vì vậy, nếu bạn viết:
find . -name *.pyc -delete
sau đó shell thực sự sẽ gọi:
find . -name foo.pyc bar.pyc -delete
điều này không có nhiều ý nghĩa, bởi vì bạn chỉ có thể có một đối số cho -name. Đó là lý do tại sao bạn cần phải thoát khỏi ký tự đặc biệt để ngăn không cho nó bị hiểu bởi vỏ. Bạn làm điều đó bằng cách thoát dấu gạch chéo ngược, hoặc cách khác, trích dẫn nó.
findnên có một phần được gọiNON-BUGSvới một cái gì đó tương tự như một ví dụ và giải thích lý do tại sao nó cần thiết.