当我有一个嵌套目录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 会扩展通配符。
你总是需要使用一些引号。