Unix 为什么zsh globbing不能使用find命令?

Unix 为什么zsh globbing不能使用find命令?,unix,zsh,glob,Unix,Zsh,Glob,我一直在使用zsh globbing执行以下命令: vim **/filename vim *.html.erb 等等,但当我输入以下内容时: find . -name *mobile* 我得到的答复是: zsh: no matches found: *mobile* 为什么?事实证明,要解决这个问题,您所要做的就是在输入周围添加一些引号: find . -name '*mobile*' 我还没有真正的答案来解释为什么……而且文档中也没有什么东西值得我注意,但是如果你知道答案,请

我一直在使用zsh globbing执行以下命令:

 vim **/filename
 vim *.html.erb
等等,但当我输入以下内容时:

 find . -name *mobile*
我得到的答复是:

 zsh: no matches found: *mobile*

为什么?

事实证明,要解决这个问题,您所要做的就是在输入周围添加一些引号:

find . -name '*mobile*'
我还没有真正的答案来解释为什么……而且文档中也没有什么东西值得我注意,但是如果你知道答案,请告诉我

find . -name *mobile* # does not work
vs

区别在于shell在解析一行时所采取的步骤。通常,shell会在运行命令之前展开找到的所有通配符。但是,单引号将参数标记为文字,这意味着shell在运行命令之前不会对该参数进行通配符扩展

为了演示差异,假设您所在的目录中包含以下文件:

$ tree
./
mobile.1
dir/
    mobile.2
zsh将在运行第一个表单之前将其扩展为以下内容:

find . -name mobile.1
这意味着find将只查找名为mobile.1的文件

第二个表格将按如下方式运行:

find . -name *mobile*
这意味着find将查找任何包含字符串“mobile”的文件名


这里需要注意的重要一点是,zsh和find都支持相同的通配符语法,但您希望find在本例中处理通配符,而不是zsh。

我认为它在这里有更好的答案:特别是,这个答案:
find . -name *mobile*