どのように「見つける」。-name * foo * `は機能しますか?


8

*コマンドのワイルドカードはfind . -name *foo*bashに置き換えられると思いました*foo*が、現在のディレクトリの何かと一致しない限り、コマンドは機能しません。ややこしい。


3
注:をに置き換えるfind . -name *foo*find . -name '*foo*'、ワイルドカードの一致が期待どおりに機能します。
ビル

回答:


14

一致が見つからない場合、bashは*s を展開せずにリテラル文字列をアプリケーションに渡します。例えば:

$ ls
foo

$ cat /tmp/test
echo $1

$ /tmp/test *foo*
foo

$ /tmp/test *bar*
*bar*

bash*foo*一致したため拡張されましたが、一致*bar*しなかったため直接渡されました。このnullglobオプションは、一致しないパターンを空の文字列に解決するようにbashに指示します。

$ shopt -s nullglob
$ /tmp/test *bar*

$

1
zshはデフォルトの動作と同じではないという少しのコメントで、エラーを返しますzsh: no matches found
ステファン・ヒメネス

zshはno_nomatchこの動作をトリガーする必要があります。
2014年

5

展開さfindれていない文字列を取得する場合は、引用符で囲むか、バックスラッシュでワイルドカードを保護できます。

$ ls
foo

$ cat /tmp/test
echo $1

$ /tmp/test '*foo*'
*foo*

$ /tmp/test \*foo\*
*foo*
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.