2013-09-27 43 views
1

我剛剛將shell從bash切換到zsh,並且發現find命令如何工作的一些不同行爲。find命令在zsh和bash中的工作方式不同

在我的舊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" 
} 

有關爲什麼可能會出現這種情況的任何建議?

回答

3

嘗試引用參數,如f 'stringBuf*'中所述,以避免過早擴展glob。

如果您將它稱爲未加引號,bash將做出明智之舉,並且在查找當前目錄中的模式並且未找到任何內容後,將按原樣將該參數傳遞給函數。

zsh另一方面,會嘗試匹配當前目錄中的模式,然後抱怨找不到任何東西,而根本不執行該功能。

使用未加引號的通配符通常不是一個好主意(除非是你的意思),因爲如果你的當前目錄中有一個名爲「stringBuffoon」的文件,你的參數f將變成「 stringBuffoon「,並且搜索不會給你你期望的結果。

+0

謝謝,這解釋了爲什麼它不工作。 – tawheed