जवाबों:
*.*
पुराने विंडोज / डॉस सिस्टम के तहत व्याख्यायहाँ महत्व विंडोज / डॉस से अधिक यूनिक्स / लिनक्स से संबंधित है। पुराने विंडोज / डॉस sytstems पर यह एक 'वाइल्डकार्ड' पैटर्न था। यूनीक्स ग्लब्स के समान तरीके से फ़ाइलनाम के मिलान के लिए वाइल्डकार्ड पैटर्न का उपयोग किया गया था। *.*
वाइल्डकार्ड आमतौर पर किसी भी फाइल मैच के लिए इस्तेमाल किया गया था।
यूनिक्स ग्लोब के साथ, *
वसीयत किसी भी वर्ण में अनुक्रम का मिलान करेगी, जैसे *
कि अपने दम पर किसी भी फाइल से मेल खाएगी। हालांकि *.*
किसी भी फ़ाइल नाम से मेल खाने का कारण भी इन वाइल्डकार्ड के काम करने के तरीके में अंतर के कारण होगा। इस लेख के अनुसार :
एक तारांकन के बाद आने वाले बिंदु के अलावा किसी भी वर्ण का कोई प्रभाव नहीं पड़ता है, क्योंकि तारांकन चिह्न कर्सर को स्थिति 12 पर ले जाता है, जिस बिंदु पर बिंदु के अलावा पार्स स्थिति में कुछ भी बदलाव नहीं होता है, जो अंतिम तीन स्थिति को साफ करता है और कर्सर को स्थानांतरित करता है।
इस व्यवहार (यूनिक्स परिप्रेक्ष्य से कुछ हद तक अजीब) का मतलब है कि निम्नलिखित के बाद एक बिंदु *
वास्तव में एक डॉट से मेल नहीं खाता है, लेकिन आपको पैटर्न में और अधिक वर्ण जोड़ने की अनुमति देने के लिए सिर्फ एक हैक तरीका है। इसका मतलब है कि एक और जोड़ने *
से इन अंतिम तीन पदों में कुछ भी मेल खाएगा।
यह थोड़ा अधिक समझ में आता है जब आप समझते हैं कि वाक्यविन्यास का उपयोग विंडोज 95 से पहले डॉस और पुराने विंडोज सिस्टम पर किया गया था जिसमें 8.3 फ़ाइलनामों की आवश्यकता थी । इन फ़ाइलनामों को केवल एक डॉट रखने की अनुमति दी गई थी और डॉट के बाद अधिकतम तीन वर्ण थे। अधिकांश, यदि सिस्टम की सभी फाइलों में तीन चरित्र विस्तार नहीं होगा (भले ही तकनीकी रूप से छोटा या कोई एक्सटेंशन की अनुमति नहीं थी), तो किसी भी तरह मुझे लगता है कि इसका *.*
किसी भी फाइल से मिलान करने के लिए उपयोग करना कम से कम (एक वार किए गए विंडोसी तर्क के नजरिए से) )।
*.*
यूनिक्स गोले में व्याख्यायूनिक्स के गोले में, जैसा कि अन्य ने बताया है, यह 'पथनाम विस्तार' या 'ग्लोब' का प्रतिनिधित्व करता है। *
निम्नलिखित यह ध्यान नहीं दिया जा पात्रों लिए नेतृत्व नहीं करता अंत व्यवहार के लिए किसी भी अजीब कूद है और इस तरह नहीं है। *.*
पैटर्न किसी भी फ़ाइल नाम से मेल खाएगा (डॉट को छोड़कर)। यह निश्चित रूप से किसी भी फ़ाइल से मेल नहीं खाएगा क्योंकि एक यूनिक्स / लिनक्स सिस्टम पर कई फाइलें हैं जिनका विस्तार नहीं है (या अन्यथा इसमें एक डॉट भी है क्योंकि इसे भी अनुमति दी गई है)।
*.*
यूनिक्स पर फ़ाइलनामों की शुरुआत में एक डॉट का मिलान न करने का कारण यह है कि शुरुआत में एक डॉट लगाने से यह होता है कि फाइलें कैसे files छिपी ’जाती हैं और छिपी हुई फाइलें ग्लोब से डिफ़ॉल्ट रूप से बाहर हो जाती हैं। POSIX शेल में उन्हें मैच करने के लिए, पैटर्न की शुरुआत में एक डॉट को स्पष्ट रूप से डालना होगा। में खोल विकल्प सेट किया जा सकता है या चर उचित रूप से सेट किया जा सकता है, लेकिन यह एक और सवाल है!bash
dotglob
GLOBIGNORE
यह glob
बैश में है, नीचे मैंने बैश मैनुअल से उद्धृत किया है:
बैश - जीएनयू बॉर्न-अगेन शेल
*
नल स्ट्रिंग सहित किसी भी स्ट्रिंग से मेल खाता है। जब ग्लोबस्टार शेल विकल्प को सक्षम
*
किया जाता है , और एक पाथनेम विस्तार संदर्भ में*s
उपयोग किया जाता है, तो एक पैटर्न के रूप में उपयोग किए जाने वाले दो आसन्न सभी फाइलों और शून्य या अधिक निर्देशिकाओं और उपनिर्देशिकाओं से मेल खाएंगे। यदि एक के बाद/
, दो सन्निकट*s
केवल निर्देशिका और उपनिर्देशिका से मेल खाएँगे।
इस स्थिति में, *.*
किसी भी फाइल का मिलान करें जिसमें .
उसके नाम में एक डॉट हो।
आप यहां अधिक विवरण देख सकते हैं ।
तारांकन शैल भाषा में *
एक glob
है। शेल कमांड भाषा से उद्धरण :
तारांकन (
'*'
) एक पैटर्न है जो किसी भी स्ट्रिंग से मेल खाएगा, जिसमें नल स्ट्रिंग भी शामिल है।
हालाँकि, यह फ़ाइल नाम से आरंभ नहीं होता है .
जब तक कि शैल विकल्प dotglob
सेट नहीं होता है।
जब आप उपयोग करते हैं *.*
, तो यह किसी भी चीज़ से मेल खाता है:
.
.
आप मैनुअल में फाइलनाम विस्तार को भी संदर्भित करना चाह सकते हैं ।
विंडोज थिंक से आने वाले बहुत सारे लोग *.*
सभी फाइलों के लिए हैं। विंडोज पर, यह है। UNIX पर, यह सभी फाइलें हैं जिनमें उनके नाम में कम से कम 1 डॉट होता है। *
अपने आप में विंडोज में ठीक काम करता है (प्रारंभिक डॉस के लिए सभी तरह से डेटिंग); हालाँकि पुरानी पाठ्यपुस्तकें प्रकाशित हुई हैं *.*
और उन्हें तोड़ना एक कठिन आदत लगती है।
*
फ़ाइल नाम विस्तार करने के लिए शेल द्वारा उपयोग किया जाने वाला एक वाइल्डकार्ड है , जिसे "ग्लोबिंग" के रूप में भी जाना जाता है। *
कुछ भी (जैसे, *.*
मिलान होगा file.
, आदि) सहित किसी भी चीज़ का विस्तार । अन्य सामान्य वाइल्डकार्ड है ?
, जो किसी एक वर्ण से मेल खाता है।
इन वाइल्डकार्ड्स के फंक्शन को रेग्युलर एक्सप्रेशंस (जैसे कि grep के साथ इस्तेमाल होने वाले) में समान कैरेक्टर्स के उपयोग के साथ भ्रमित न करें।
वह स्टार-डॉट-स्टार है - कम से कम, डॉस (और बाद में, निश्चित रूप से, विंडोज) दुनिया में। डॉस में, डॉट .
का विशेष जादुई अर्थ है, क्योंकि फ़ाइल नाम एक आठ-वर्ण आधार (बाद में विस्तारित, लेकिन चलो पुराने स्कूल रहें) और एक तीन-वर्ण एक्सटेंशन (जो फ़ाइल प्रकार को परिभाषित करता है)। यूनिक्स में, फ़ाइल प्रकार आमतौर पर फ़ाइल के पहले दो बाइट्स (या अन्य जादू) द्वारा परिभाषित किया जाता है, और विस्तार जानकारीपूर्ण होता है, लेकिन बहुत अर्थ नहीं रखता है। सिवाय इसके कि यह सब धुंधला हो गया है।
तो, यूनिक्स में, कोई विशेष अर्थ नहीं है। तारांकन यूनिक्स गोले में एक "ग्लोबबिंग" चरित्र है और किसी भी वर्ण (शून्य सहित) के लिए वाइल्डकार्ड है। ?
एक और आम गोलाकार चरित्र है, जो किसी भी पात्र से बिल्कुल मेल खाता है ।
*.*
किसी भी फ़ाइल नाम से मेल खाता है जिसमें कम से कम एक होता है .
। इसका कोई विशेष नाम या कोई अर्थ नहीं है *a*
या इससे अधिक नहीं है *_*
। और *.?
डॉट के साथ किसी भी फाइल का मिलान करेगा और उस डॉट के बाद एक अक्षर होगा। कुछ और जटिल विस्तारित ग्लोबिंग पैटर्न भी हैं - अपने शेल का मैन पेज देखें।
"न्यू हैकर डिक्शनरी" (पुराने एमआईटी "जारगॉन फाइल का विस्तार") नोट करता है कि *
प्रतीक के लिए "स्टार" सबसे आम नाम है (इसके बाद splat
), और मुझे लगता है कि यह अभी भी व्यवहार में सच है, और .
निश्चित रूप से है " डॉट ”, इसलिए, जबकि इसका किसी विशेष प्रतीक के रूप में कोई विशेष आंतरिक अर्थ नहीं है, फिर भी अनुक्रम यथोचित रूप से यूनिक्स पर स्टार-डॉट-स्टार कहलाता है । (यह सिर्फ कम उपयोगी है।)
यहाँ वास्तव में 2 प्रतीक हैं, तारांकन चिह्न *
और बिंदु .
। गोले आमतौर पर केवल तारांकन को किसी भी वर्ण के रूप में व्याख्या करते हैं, लेकिन regex में इसका मतलब एक लालची ग्लोब होगा। इस मामले में यह ऐसी किसी भी चीज़ से मेल खाएगा जो अंत नहीं है या डॉट के साथ शुरू नहीं होती है, लेकिन इसमें कम से कम एक है:
somefile.dot # match
.dot.between.words. # match
.onlydotatstart # don't match
onlydotatend. # match
.startandenddot. # don't match
onlydotatend.
मामला एक मैच है, निश्चित रूप से?
touch 'onlydotatend.' && echo *.*
इसे वापस नहीं करता
bash
और dash
। आप किस खोल का उपयोग कर रहे हैं?
zsh
विन्यास पर यह कोशिश की और यह भी वहाँ काम करता है। मुझे समझ में नहीं आता कि कैसे onlydotatend.
एक मैच नहीं हो सकता है, क्या कोई कॉन्फ़िगरेशन विकल्प है जो ऐसा करता है?
*7.*
, उन सभी फ़ाइलों को प्राप्त करें, जिनके एक्सटेंशन से पहले अंतिम चरित्र ए है7
, और*sa*
, मुझे उन सभी फ़ाइलों को मिलता है, जिसमेंsa
फ़ाइल नाम में कहीं भी सबस्ट्रिंग शामिल हैं , और इसी तरह। (तदनुसार, आपके द्वारा उद्धृत लेख का शीर्षक है कि MS-DOS में वाइल्डकार्ड कैसे काम करते हैं ? (स्वयं द्वारा जोड़ा गया)।)