कौन सौदा करता है (व्याख्या) * में
echo *
क्या प्रतिध्वनि तारा देखती है या शेल इसके बारे में ध्यान रखता है और फ़ाइल नाम की सूची वापस करता है ..
व्हाट अबाउट
cp temp temp*
कौन सौदा करता है (व्याख्या) * में
echo *
क्या प्रतिध्वनि तारा देखती है या शेल इसके बारे में ध्यान रखता है और फ़ाइल नाम की सूची वापस करता है ..
व्हाट अबाउट
cp temp temp*
जवाबों:
बैश (या जो भी आप शेल के रूप में उपयोग करें), किसी भी इनपुट को पढ़ने के लिए पहली बात यह है, और विशेष वर्ण जैसे की व्याख्या शुरू कर देंगे ?
और *
। CWD*
में जो भी मैच होते हैं, उनका विस्तार होता है , जिसका अर्थ है कि तारांकन को उक्त मैचों द्वारा प्रतिस्थापित किया जाता है।
ज्यादातर मामलों में, यह काफी हद तक आगे है, लेकिन समय-समय पर कुछ भ्रामक मामलों को जन्म दे सकता है।
निम्नलिखित को धयान मे रखते हुए। एक निर्देशिका में यह सामग्री है:
यदि आप तब mv *
कुछ अजीब लगता है टाइप करें : test3
वहाँ है, लेकिन बाकी चला गया है। पहली बार में अजीब होते हुए, यह समझ में आता है कि एक बार आप समझ जाते हैं कि वास्तव में क्या बैश होता है mv
। तारांकन के कारण, bash व्याख्या mv *
करता है mv test test1 test2 test3
, और जब mv को वह सूची मिलती है, तो यह मान लेगा कि अंतिम तर्क गंतव्य है, जो कि सभी फ़ाइलों को स्थानांतरित कर दिया गया है।
आपके द्वारा सूचीबद्ध आदेशों के लिए:
echo *
एक गरीब-आदमी के रूप में कार्य कर सकता है ls
। शेल उस निर्देशिका में जो कुछ भी है उसमें तारांकन का विस्तार करेगा, और जैसा कि मुझे यकीन है कि आप पहले से ही जानते हैं, echo
शाब्दिक रूप से तर्क के रूप में इसे पारित करने के लिए कुछ भी बैश कर सकते हैं।cp temp temp*
mv
ऊपर बताई गई कमांड के अनुसार कुछ हद तक व्यवहार करेंगे , जब तक कि अस्थायी नाम की केवल एक निर्देशिका न हो, जिसमें स्रोत और गंतव्य का नाम समान है, अर्थात यह कुछ नहीं करेगा।*
इसके बजाय उपयोग करने के बारे में "गरीब" कुछ भी नहीं है ls
। उदाहरण के लिए, यदि फाइलनाम में व्हॉट्सएप या ग्लोब कैरेक्टर होता for f in *; do
है , तो यह अधिक विश्वसनीय है for f in $(ls)
। (हालांकि, अगर CWD में कोई फाइल नहीं है, तो यह विफल हो जाएगा, इसलिए आपको उस मामले की जांच करने की आवश्यकता है।)
shopt nullglob
है।
echo *
, कि चाल कुछ मामलों में आप को बचा सकता है ।
जैसा कि पहले ही कहा गया है, शेल का विस्तार *
इसलिए echo
है क्योंकि वर्तमान निर्देशिका में शेल जो भी तर्क देता है। हालाँकि, ध्यान दें कि यदि विस्तार से कुछ भी नहीं होता है, तो उस स्थिति में यदि निर्देशिका में कोई ग़ैर-छिपी हुई फ़ाइलें नहीं हैं, तो *
अपरिवर्तित छोड़ दिया जाता है और जैसा कि कमांड को कहा जाता है (जब तक कि कुछ गोले जैसे गैर मानक विकल्पों का उपयोग नहीं किया जाता है bash
)। echo *
इसके बाद गरीब आदमी की तरह व्यवहार ls
नहीं किया जाएगा क्योंकि पूर्व में कुछ भी नहीं छपेगा जबकि बाद में प्रिंट होगा *
।
इसी तरह, वर्तमान निर्देशिका में cp /tmp/temp temp*
नाम से एक फ़ाइल बनाएंगे temp*
यदि कम से कम एक फ़ाइल नहीं है जो नाम से शुरू होती है temp
।
अंत में, यदि आप चाहते हैं कि *
जो भी मामला हो, उसे अपरिवर्तित किया जाए , तो आप एकल उद्धरण '*'
, दोहरे उद्धरण "*"
या बैकलैश का उपयोग करके इसे विस्तार से बचा सकते हैं \*
।
बैश में, शेल इसके साथ संबंधित है। आप देखते हैं कि यदि आप भी *
बिना प्रतिध्वनि के प्रयास करते हैं
नोट- कुछ टिप्पणियों के आधार पर, मैं सुझाव दूंगा कि * रनिंग करें। एक निर्देशिका बनाने के लिए और कुछ फाइलों को बनाने के लिए टच कमांड का उपयोग करें, और सुनिश्चित करें कि उनमें से कोई भी नहीं है, या कम से कम यह सुनिश्चित करें कि पहला वर्णानुक्रम, नाम नहीं है मार्ग में किसी भी लिपि या आदेश की।
$ *
bash: a: command not found
$ echo *
a a.aa a.ab a.b a.htm a.tx
तो ls *
थोड़ा क्लिच है
विंडोज में, *
कमांड द्वारा नियंत्रित किया जाता है, इसलिए dir *.*
क्लिच नहीं है।
नोट- कुछ टिप्पणियों को देखकर, मैं जोड़ूंगा, एक जोखिम चल रहा है * फिर ENTER। यदि आपके पास एक फ़ाइल है जिसे rm कहा जाता है जो कि डायरेक्टरी लिस्टिंग में पहले स्थान पर है, तो यह खतरनाक है क्योंकि इसके हटने के बाद कुछ भी हो सकता है। इसके अलावा, और यह कम संभावना नहीं है, अगर निर्देशिका लिस्टिंग में पहली फ़ाइल पथ में एक स्क्रिप्ट का नाम है, तो वह इसे चलाएगा।
rm
, जिसका नाम बेशक है।
-rf
? मैंने कोशिश की touch -rf
और touch \-rf
वह इसे नहीं बना रहा है।
-rf
? (मैं rm नामक एक फ़ाइल और -rf नामक एक फ़ाइल के खतरे को समझता हूं, और टाइपिंग की समस्या * और एक महत्वपूर्ण फ़ोल्डर में प्रवेश करने के लिए, मुझे ऐसा करने की योजना नहीं है)
कमांड को तर्क सौंपने से पहले शेल कई विस्तार करता है ।
यह भी देखें https://www.gnu.org/software/bash/manual/bashref.html#Simple-Command.Expansion
बैश-विशिष्ट नहीं, http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_01 देखें