जब आप ऐसा करेंगे विस्तार किया जा रहा है इससे पहले कि यह करने के लिए पारित कर दिया है । यह कहना है कि अगर हमारे पास एक निर्देशिका में तीन फाइलें ( और ) हैं , तो वास्तव में चल रही है ।ls *
*
ls
a
b
c
ls *
ls a b c
जब बैश का विस्तार नहीं हो सकता है, तो यह कच्चे स्ट्रिंग से गुजरता है। यही कारण है कि आप वाइल्डकार्ड्स को त्रुटि में देखते हैं, साथ में एक संदेश नहीं मिला। ls
शाब्दिक रूप से कॉल की गई फ़ाइल के लिए लिस्टिंग दिखाने की कोशिश की *.bash*
।
तो वह विस्तार क्यों नहीं हुआ? अच्छी तरह से डिफ़ॉल्ट ग्लोबिंग द्वारा (जिसे वाइल्डकार्ड विस्तार कहा जाता है) छिपी हुई फ़ाइलों को वापस नहीं करेगा। आप इसे बदल सकते हैं shopt -s dotglob
(जो तब तक जारी नहीं रहेगा जब तक कि आप इसे अपने में नहीं चिपकाते हैं .bashrc
- यह डिफ़ॉल्ट रूप से एक अच्छे कारण से अक्षम हो सकता है इसलिए इसके साथ सावधान रहें), यहां एक त्वरित डेमो है:
$ ls *.bash*
ls: cannot access *.bash*: No such file or directory
$ shopt -s dotglob
$ ls *.bash*
.bash_aliases .bash_history .bash_logout .bashrc .bashrc.save
इसका अपवाद यह है - जैसा कि आप पहले ही दिखा चुके हैं- जब आप पहले ही स्पष्ट रूप से कह चुके हैं कि फाइलें एक पैटर्न के साथ छिपी होंगी .bash*
। यह बस डिफ़ॉल्ट dotglob
सेटिंग को ओवरराइड करता है :
$ shopt -u dotglob # unset dotglob
$ ls .bash*
.bash_aliases .bash_history .bash_logout .bashrc .bashrc.save
वैसे भी उस विचित्रता के अलावा, मुझे आशा है कि इससे आपको यह समझने में मदद मिलेगी कि सतह के नीचे क्या चल रहा है।
अन्य रहे हैं shopt
झंडे कि परिवर्तन कैसे काम करता है ग्लोबिंग: extglob
, failglob
, globstar
, nocaseglob
और nullglob
। वे और अन्य shopt
झंडों की एक बेड़ को बाश मैनुअल के हिस्से के रूप में प्रलेखित किया जाता है ।
इसी तरह, पैटर्न मिलान पर पेज को कुछ अच्छे पढ़ने के लिए बनाना चाहिए।
Are जब तक failglob
या nullglob
सेट न हों।