find 命令中引号的区别

find 命令中引号的区别

当我有一个嵌套目录find . -name "*.py" -print命令时,我会得到当前目录下的所有 python 脚本。但是,find . -name *.py -print仅返回当前目录中的 python 脚本。

这是预期的行为吗?是什么造成了这种差异?我使用 Mac OS X 10.7。

答案1

这可能不是同一个命令。你可以放在echo前面检查一下。

$ echo find . -name "*.py" -print
find . -name *.py -print

$ echo find . -name *.py -print
find . -name foobar.py barfoo.py -print

如果没有引号,shell 会展开*.py,因此find会得到不同的参数,从而产生不同的结果。

*当您希望命令按字面意思查看时,您应该始终引用*。否则,行为将不稳定(只要没有*.py可供 shell 扩展的文件,该命令就可以工作)。

答案2

因为当您不保护模式时,shell 会扩展通配符。

你总是需要使用一些引号。

相关内容