का प्रयोग {html,php,htm}केवल एक के रूप में काम कर सकते हैं ब्रेस विस्तार है, जो एक गैरमानक (नहीं POSIX संगत) की सुविधा है bash, kshऔर zsh।
एक ब्रेस विस्तार के लिए पहचाना जाना चाहिए , यह कमांड लाइन पर एक निर्विवाद (एक) टोकन होना चाहिए ।
एक ब्रेस विस्तार कई तर्कों के लिए फैलता है , इसलिए मामले में हाथ कई विकल्पों grepको देखते हुए समाप्त होता है , जैसे कि आपने उन्हें व्यक्तिगत रूप से पारित किया था। --include=...
ब्रेस विस्तार के परिणाम ग्लोबिंग (फ़ाइलनाम विस्तार) के अधीन होते हैं , जिसमें नुकसान होते हैं :
प्रत्येक जिसके परिणामस्वरूप तर्क आगे मिलान फ़ाइल नाम करने के लिए विस्तारित किया जा सकता है अगर यह शामिल करने के लिए होता है गैर उद्धृत जैसे ग्लोबिंग अक्षरों से परे *।
हालांकि, यह टोकन के साथ होने की संभावना नहीं है --include=*.html, जैसे (उदाहरण के लिए, आपके पास फ़ाइल का शाब्दिक नाम होना चाहिए, जैसे --include=foo.htmlकि मिलान करने के लिए कुछ ऐसा है), यह सामान्य रूप से ध्यान में रखने योग्य है।
यदि nullglobशेल विकल्प चालू होता है ( shopt -s nullglob) और ग्लोबिंग कुछ भी मैच नहीं करता है , तो तर्क को छोड़ दिया जाएगा ।
इसलिए, पूरी तरह से मजबूत समाधान के लिए, निम्नलिखित का उपयोग करें:
grep -R '--include=*.'{html,php,htm} pattern /some/path
'--include=*.'एकल-उद्धृत होने के कारण शाब्दिक माना जाता है ; यह एक ग्लोबिंग चरित्र के रूप में अनजाने व्याख्या को रोकता है ।*
{html,php,htm}, की - आवश्यकता का - निर्विवाद ब्रेस विस्तार [1]
, 3 तर्कों का विस्तार करता है, जो {...} सीधे '...'टोकन का पालन करने के कारण , उस टोकन को शामिल करता है।
इसलिए, शेल द्वारा उद्धरण हटाने के बाद, निम्नलिखित 3 शाब्दिक तर्क अंततः दिए गए हैंgrep :
--include=*.html
--include=*.php
--include=*.htm
[१] अधिक सटीक रूप से, यह ब्रेस विस्तार के केवल वाक्यविन्यास-प्रासंगिक भाग हैं जिन्हें अयोग्य घोषित किया जाना चाहिए, सूची तत्वों को अभी भी व्यक्तिगत रूप से उद्धृत किया जा सकता है और होना चाहिए यदि उनमें ग्लोबिंग मेटाबाट्रर्स होते हैं जो ब्रेस विस्तार के बाद अवांछित ग्लोबिंग हो सकता है; इस मामले में आवश्यक नहीं है, ऊपर के रूप में लिखा जा सकता है
'--include=*.'{'html','php','htm'}