find命令在zsh和bash中的工作方式不同

时间:2013-09-27 19:47:49

标签: linux bash shell zsh

我刚将shell从bash切换到zsh,我注意到find命令的工作原理有不同的行为。

在我的旧bash shell中,我有一个基本上复制了find命令行为的函数。出于某些奇怪的原因,find命令在zsh中不起作用,但在我的旧bash中起作用

bash中的命令

~ /java_src: f stringBuf*
./com/sun/org/apache/xml/internal/utils/StringBufferPool.java
./java/io/StringBufferInputStream.java
./java/lang/StringBuffer.java

zsh中的相同命令

~ /java_src: f stringBuf*
zsh: no matches found: stringBuf*

这是功能

# find shorthand
function f() {
     find . -iname "$1"
 }

有关为何可能出现这种情况的任何建议?

1 个答案:

答案 0 :(得分:3)

尝试引用参数,如f 'stringBuf*'中所述,以避免过早的全局扩展。

如果你没有引用它,bash会做出聪明的事情,在查找当前目录中的模式并找不到任何内容之后,会将参数原样传递给函数。

另一方面,

zsh将尝试匹配当前目录中的模式,然后抱怨找不到任何内容,并且根本不执行该函数。

使用不带引号的通配符通常不是一个好主意(除非你的意思是这样),因为,如果你当前目录中有一个名为“stringBuffoon”的文件,那么f的参数将是变成了“stringBuffoon”,搜索不会给你你期望的结果。