Bagaimana `menemukan. -nama * foo * `berhasil?


8

Saya pikir wildcard *dalam perintah find . -name *foo*digantikan oleh bash, namun perintah itu berfungsi kecuali *foo*cocok dengan sesuatu di direktori saat ini, maka itu tidak. Ini membingungkan.


3
Catatan: Jika Anda mengganti find . -name *foo*dengan find . -name '*foo*'itu akan memungkinkan cocok wildcard berfungsi seperti yang diharapkan.
Bill

Jawaban:


14

Jika bash tidak dapat menemukan kecocokan, itu akan meneruskan string literal ke aplikasi dengan *s unexpanded. Sebagai contoh:

$ ls
foo

$ cat /tmp/test
echo $1

$ /tmp/test *foo*
foo

$ /tmp/test *bar*
*bar*

bashdiperluas *foo*karena cocok, tetapi lulus *bar*langsung karena tidak cocok. The nullglobpilihan akan memberitahu bash untuk mengatasi pola yang tidak cocok dengan string kosong sebagai gantinya:

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

$

1
Sebuah komentar kecil untuk mengatakan bahwa zsh belum perilaku default yang sama, ia mengembalikan kesalahan: zsh: no matches found.
Stéphane Gimenez

zsh harus no_nomatchmemicu perilaku ini.
chx

5

Jika Anda ingin findmendapatkan string yang tidak dikembangkan, maka Anda bisa mengutipnya atau melindungi wildcard dengan backslash.

$ ls
foo

$ cat /tmp/test
echo $1

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

$ /tmp/test \*foo\*
*foo*
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.