1

シェルを bash から zsh に切り替えたところ、find コマンドの動作が異なることに気付きました。

私の古い bash シェルには、基本的に 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" という名前のファイルがある場合、パラメーターはf"stringBuffoon" に変換され、検索しても、期待する結果が得られません。

于 2013-09-27T20:05:57.407 に答える