Menggunakan {html,php,htm}hanya bisa bekerja sebagai ekspansi penjepit , yang merupakan tidak standar fitur (tidak POSIX-compliant) dari bash, ksh, dan zsh.
Agar perluasan tanda kurung kurawal dapat dikenali, itu harus berupa tanda kutip (bagian dari a) pada baris perintah.
Ekspansi brace meluas ke beberapa argumen , jadi dalam kasus yang dihadapi grepakhirnya melihat beberapa --include=... opsi, seperti jika Anda meneruskannya satu per satu.
Hasil ekspansi brace tunduk pada globbing (perluasan nama file) , yang memiliki kendala :
Setiap argumen yang dihasilkan selanjutnya dapat diperluas ke nama file yang cocok jika kebetulan berisi karakter meta globbing tanpa tanda kutip seperti *.
Meskipun hal ini tidak mungkin terjadi dengan token seperti --include=*.html(mis., Anda harus memiliki file yang secara harfiah dinamai sesuatu yang --include=foo.htmlcocok), perlu diingat secara umum.
Jika nullglobopsi shell kebetulan dihidupkan ( shopt -s nullglob) dan globbing tidak cocok dengan apa pun , argumen akan dibuang .
Oleh karena itu, untuk solusi yang sepenuhnya kuat , gunakan yang berikut ini:
grep -R '--include=*.'{html,php,htm} pattern /some/path
'--include=*.'diperlakukan sebagai literal , karena dikutip tunggal ; ini mencegah interpretasi yang tidak disengaja *sebagai karakter yang menggelembung.
{html,php,htm}, the - of needs - unquoted brace expansion [1]
, meluas menjadi 3 argumen, yang, karena {...} mengikuti '...'token secara langsung , termasuk token tersebut.
Oleh karena itu, setelah penghapusan kutipan oleh shell, berikut 3 literal argumen akhirnya dilewatkan kegrep :
--include=*.html
--include=*.php
--include=*.htm
[1] Lebih tepatnya, hanya bagian yang relevan dengan sintaks dari perluasan tanda kutip yang harus tidak diberi tanda kutip , elemen daftar mungkin masih dikutip secara individual dan harus berisi karakter meta penggabungan yang dapat mengakibatkan penggumpalan yang tidak diinginkan setelah perluasan tanda kurung; sementara tidak diperlukan dalam kasus ini, di atas dapat ditulis sebagai
'--include=*.'{'html','php','htm'}