如何`找到 . -name *foo*` 有效吗?

如何`找到 . -name *foo*` 有效吗?

*我认为命令中的通配符find . -name *foo*被 bash 替换,但该命令有效,除非与*foo*当前目录中的某些内容匹配,否则它不会。这很令人困惑。

答案1

如果 bash 找不到匹配项,它会将文字字符串传递给应用程序,并且*s 未展开。例如:

$ ls
foo

$ cat /tmp/test
echo $1

$ /tmp/test *foo*
foo

$ /tmp/test *bar*
*bar*

bash*foo*因为匹配而扩展,但*bar*因为不匹配而直接通过。该nullglob选项将告诉 bash 将不匹配的模式解析为空字符串:

$ shopt -s nullglob
$ /tmp/test *bar*

$

答案2

如果您想find获取未扩展的字符串,那么您可以用引号引起来或者用反斜杠保护通配符。

$ ls
foo

$ cat /tmp/test
echo $1

$ /tmp/test '*foo*'
*foo*

$ /tmp/test \*foo\*
*foo*

相关内容