Kullanımı {html,php,htm}
sadece olarak çalışabilir ayracı genişleme standart olmayan bir (POSIX uyumlu değil) özelliğidir, bash
, ksh
, ve zsh
.
Bir küme ayracı genişletmesinin tanınması için, komut satırında tırnaksız ( a'nın parçası) bir belirteç olması gerekir .
Bir bağ genişleme genişler birden argümanlar eli o kadar halinde, grep
görerek uçları birden --include=...
hepsini ayrı ayrı geçmişti sadece sanki seçenekleri.
Küme ayracı genişletmesinin sonuçları , tuzakları olan globbing'e (dosya adı genişletme) tabidir :
Sonuçta ortaya çıkan her bağımsız değişken, .tk gibi tırnaksız genelleme meta karakterleri içeriyorsa eşleşen dosya adlarına genişletilebilir *
.
Bu gibi belirteçlerde --include=*.html
(örneğin, eşleşecek bir şey gibi kelimenin tam anlamıyla adlandırılmış bir dosyaya sahip olmanız gerekir --include=foo.html
), ancak genel olarak akılda tutmaya değer.
nullglob
Kabuk seçeneği açılırsa ( shopt -s nullglob
) ve globbing hiçbir şeyle eşleşmezse , argüman atılır .
Bu nedenle, tamamen sağlam bir çözüm için aşağıdakileri kullanın:
grep -R '--include=*.'{html,php,htm} pattern /some/path
'--include=*.'
tek tırnaklı olması nedeniyle değişmez olarak değerlendirilir ; bu , bir globbing karakterinin yanlışlıkla yorumlanmasını önler .*
{html,php,htm}
- zorunluluk - işlem görmeyen bağ genişleme [1]
, genişler 3 nedeniyle, bağımsız değişkenler, {...}
doğrudan aşağıdaki '...'
belirteç , içerir belirteç.
Bu nedenle, kabuk tarafından alıntı kaldırıldıktan sonra , aşağıdaki 3 değişmez argüman sonuçta iletilirgrep
:
--include=*.html
--include=*.php
--include=*.htm
[1] Daha doğrusu, tırnaksız olması gereken yalnızca küme ayracı genişletmesinin sözdizimiyle ilgili kısımlarıdır; liste öğeleri yine de tek tek alıntılanabilir ve eğer küme ayracı genişletmeden sonra istenmeyen genellemeye neden olabilecek globbing meta karakterleri içeriyorlarsa; bu durumda gerekli olmamakla birlikte, yukarıdakiler şu şekilde yazılabilir:
'--include=*.'{'html','php','htm'}