带引号和不带引号的 find -name 之间有区别吗?

带引号和不带引号的 find -name 之间有区别吗?

当我正要向 gnu.org 上的 findutils 提交一个 bug 时,我看到一则通知,询问我是否知道这两个命令之间的区别:

find -name *.c    

find -name "*.c"

我经常使用 find 命令,但我认为这两个命令没什么区别。所以我很好奇是我错了还是这只是另一个 GNU 家伙在开玩笑?

答案1

在第一个例子中,你的 shell 将首先扩展*.c以匹配当前目录中以 结尾的所有文件.c

因此,如果你的目录中有one.czwei.ctres.c,你的 shell 会将其扩展为

find . -name one.c zwei.c tres.c

并且可能会感到困惑,因为您在--find之后传递了几个额外的参数,并且它们不被视为您正在搜索的内容的一部分。-name one.czwei.ctres.c-name

在第二个示例中,您将文字字符串传递*.c-name选项find。这是find知道如何处理的东西——可能就是您正在寻找的东西。

完成相同操作的另一种方法是使用反斜杠转义:

find . -name \*.c

(还请注意,您的示例需要一个参数来告诉find从哪里开始搜索。这通常只是.为了指示当前目录。)

答案2

前者仅*.c当当前目录中没有匹配的文件时才会产生结果,否则它将扩展为这些文件名。后者将始终产生文本*.c

相关内容