我刚将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"
}
有关为何可能出现这种情况的任何建议?
答案 0 :(得分:3)
尝试引用参数,如f 'stringBuf*'
中所述,以避免过早的全局扩展。
如果你没有引用它,bash
会做出聪明的事情,在查找当前目录中的模式并找不到任何内容之后,会将参数原样传递给函数。
zsh
将尝试匹配当前目录中的模式,然后抱怨找不到任何内容,并且根本不执行该函数。
使用不带引号的通配符通常不是一个好主意(除非你的意思是这样),因为,如果你当前目录中有一个名为“stringBuffoon”的文件,那么f
的参数将是变成了“stringBuffoon”,搜索不会给你你期望的结果。