find . -name *mobile* # does not work
vs
find . -name '*mobile*' # works
Sự khác biệt là do các bước mà vỏ mất khi nó phân tích một dòng. Thông thường, shell mở rộng bất kỳ ký tự đại diện nào mà nó tìm thấy trước khi nó chạy lệnh. Tuy nhiên, dấu nháy đơn đánh dấu đối số là một chữ, có nghĩa là trình bao không mở rộng ký tự đại diện mở rộng trên đối số đó trước khi chạy lệnh.
Để chứng minh sự khác biệt, giả sử bạn đang ở trong một thư mục với các file sau:
$ tree
./
mobile.1
dir/
mobile.2
zsh sẽ mở rộng các hình thức đầu tiên sau trước khi chạy nó:
find . -name mobile.1
Có nghĩa là tìm kiếm sẽ chỉ tìm các tệp có tên là mobile mobile
Biểu mẫu thứ hai sẽ được chạy như sau:
find . -name *mobile*
Điều đó có nghĩa là tìm sẽ tìm kiếm bất kỳ tên tệp nào chứa chuỗi "di động".
Điều quan trọng cần lưu ý ở đây là cả zsh và tìm hỗ trợ cùng một cú pháp ký tự đại diện, nhưng bạn muốn tìm cách xử lý các ký tự đại diện trong trường hợp này, chứ không phải zsh.
Tôi nghĩ rằng nó có câu trả lời tốt hơn ở đây: https://unix.stackexchange.com/questions/130958/scp-wildcard-not-working-in-zsh – sttaq