1

我刚刚将我的 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"
 }

关于为什么会出现这种情况的任何建议?

4

1 回答 1

5

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

如果你称它为不带引号的,bash它将做聪明的事情,并且在你当前目录中查找模式并且没有找到任何东西之后,会将参数按原样传递给函数。

zsh另一方面,将尝试匹配当前目录中的模式,然后抱怨没有找到任何东西,并且根本不执行该函数。

使用不带引号的通配符通常不是一个好主意(除非您是认真的),因为如果您当前目录中有一个名为“stringBuffoon”的文件,那么您的参数 tof将被转换为“stringBuffoon”,并且搜索不会给你你期望的结果。

于 2013-09-27T20:05:57.407 回答