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

taw*_*eed 1 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
Run Code Online (Sandbox Code Playgroud)

zsh 中的相同命令

~ /java_src: f stringBuf*
zsh: no matches found: stringBuf*
Run Code Online (Sandbox Code Playgroud)

这是函数

# find shorthand
function f() {
     find . -iname "$1"
 }
Run Code Online (Sandbox Code Playgroud)

关于为什么会出现这种情况有什么建议吗?

Sir*_*hos 5

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

如果您称其为不带引号的,bash则会执行明智的操作,并且在当前目录中查找模式并且未找到任何内容后,会将参数按原样传递给函数。

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

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