जवाबों:
*
(स्टार, या तारांकन) विशेष वर्ण जो है (आमतौर पर) खोल से व्याख्या से पहले यह आदेश दिया जाता है। यह (आमतौर पर) अग्रणी पट्टों वाले लोगों को छोड़कर सभी फाइलनामों तक विस्तारित है। अधिक जानकारी के लिए पैटर्न मिलान के बारे में बैश मैनुअल देखें।
यदि उद्धरणों में रखा गया है तो स्टार को शेल द्वारा व्याख्या नहीं की जाएगी और कमांड वर्बेटिम को दिया जाता है।
उदाहरण समझाया। एक उद्धृत:
grep "string" . -r --include "*.pl"
यहां तर्क के साथ grep
विकल्प प्राप्त होगा । यह चरित्र के साथ पहले चरित्र के रूप में 4 वर्ण स्ट्रिंग है । उस स्ट्रिंग के साथ क्या करना पूरी तरह से है । इस मामले में केवल पैटर्न से मेल खाने वाली फ़ाइलों पर विचार करने का मतलब है ।--include
*.pl
*
grep
grep
--include
*.pl
AFAIK परदे के पीछे gnu grep उसी पैटर्न का उपयोग करता है जो gnu bash के रूप में मिलान करता है।
एक उद्धृत नहीं:
grep "string" . -r --include *.pl
यहां शेल पहले *.pl
समाप्त होने वाले सभी फ़ाइल नाम के पैटर्न का विस्तार करेगा .pl
। मान लीजिए कि फाइलें हैं foo.pl
, bar.pl
और baz.pl
। कमांड लाइन के विस्तार के बाद ऐसा दिखता है:
grep "string" . -r --include foo.pl bar.pl baz.pl
यहां तर्क के साथ grep
विकल्प मिलेगा , इसके बाद विकल्प और । केवल पैटर्न से मेल खाने वाली फ़ाइलों पर विचार करने का मतलब है । चूंकि पैटर्न में कोई वाइल्डकार्ड नहीं हैं, इसलिए केवल फ़ाइल मिलान जिसे फ़ाइल नाम दिया जाएगा ।--include
foo.pl
bar.pl
baz.pl
--include foo.pl
foo.pl
foo.pl
विकल्प bar.pl
और baz.pl
साधन grep उन फ़ाइलों में भी खोज करेंगे, लेकिन चूंकि वे पैटर्न से मेल नहीं खाते हैं, foo.pl
इसलिए उन्हें अनदेखा किया जाएगा।
grep -r
था कि क्यों असंगत लग रहा था, लेकिन कभी भी इस पर ध्यान नहीं दिया गया था कि जब मैं एक का उपयोग करता था *
।
अंतर यह है कि यदि आप पैटर्न का उद्धरण नहीं करते हैं ( *.pl
) यह शेल द्वारा विस्तारित है। उदाहरण के लिए, यदि आप grep
एक निर्देशिका में अपना नाम चलाते हैं, जिसमें एक फ़ाइल होती है foo.pl
, जिसे *pl
शेल द्वारा विस्तारित किया जाता है, जो grep
वास्तव में देखता है:
grep "string" . -r --include foo.pl
चूंकि आप इसे केवल शामिल करने के लिए कहते हैं, foo.pl
यह केवल उस एक फ़ाइल के माध्यम से खोज करेगा।
यदि आप अपने पैटर्न को उद्धृत करते हैं, तो शेल इसका विस्तार नहीं करेगा और grep
सही कमांड प्राप्त करता है, अर्थात्
grep "string" . -r --include *pl
peopl
द्वारा विस्तार नहीं मिलेगा *.pl
।
grep
; यह खोल में है।grep
उद्धरण कभी नहीं देखता।