Câu trả lời:
Nếu bash không thể tìm thấy kết quả khớp, nó sẽ chuyển chuỗi ký tự đến ứng dụng *
chưa được mở rộng. Ví dụ:
$ ls
foo
$ cat /tmp/test
echo $1
$ /tmp/test *foo*
foo
$ /tmp/test *bar*
*bar*
bash
mở rộng *foo*
vì nó khớp, nhưng được truyền *bar*
trực tiếp vì không được. Thay vào đó, nullglob
tùy chọn sẽ báo bash để giải quyết các mẫu không khớp với chuỗi trống thay thế:
$ shopt -s nullglob
$ /tmp/test *bar*
$
zsh: no matches found
.
no_nomatch
phải kích hoạt hành vi này.
find . -name *foo*
bằngfind . -name '*foo*'
nó sẽ cho phép các ký tự đại diện hoạt động như mong đợi.