我认为*命令中的通配符find . -name *foo*被 bash 替换,但该命令有效,除非*foo*匹配当前目录中的某些内容,否则它不会。这很混乱。
Mic*_*zek 14
如果 bash 找不到匹配项,它会将文字字符串传递给*未扩展的 s的应用程序。例如:
$ ls
foo
$ cat /tmp/test
echo $1
$ /tmp/test *foo*
foo
$ /tmp/test *bar*
*bar*
Run Code Online (Sandbox Code Playgroud)
bash扩展*foo*因为它匹配,但*bar*直接通过,因为它没有。该nullglob选项将告诉 bash 将不匹配的模式解析为空字符串:
$ shopt -s nullglob
$ /tmp/test *bar*
$
Run Code Online (Sandbox Code Playgroud)
如果您想find获取未扩展的字符串,则可以引用它或使用反斜杠保护通配符。
$ ls
foo
$ cat /tmp/test
echo $1
$ /tmp/test '*foo*'
*foo*
$ /tmp/test \*foo\*
*foo*
Run Code Online (Sandbox Code Playgroud)