चुपचाप बिना किसी मैच के एक ग्लोब पैटर्न से एक खाली स्ट्रिंग कैसे प्राप्त करें


24

कहें कि मेरे पास तीन फ़ाइलों वाला एक फ़ोल्डर है:

foo1
foo2
bar

1. अगर मैं दौड़ता हूँ

list_of_files=$(print foo*)
echo $list_of_files

मुझे मिला: foo1 foo2

2. अगर मैं दौड़ता हूँ

list_of_files=$(print bar*)
echo $list_of_files

मुझे मिला: bar

3. हालाँकि, अगर मैं दौड़ता हूँ

list_of_files=$(print other*)
echo $list_of_files

मुझे मिलता है: zsh: no matches found: other*( $list_of_filesहालांकि चर खाली है)


अगर यह ग्लोब विस्तार से मेल नहीं खा सकता है, तो क्या ज़ीश से शिकायत करने का कोई तरीका नहीं है?

मेरा लक्ष्य उपरोक्त तंत्र का उपयोग चुपचाप उन फ़ाइलों की सूची एकत्र करना है जो किसी दिए गए ग्लोब पैटर्न से मेल खाते हैं।

जवाबों:


33

ग्लोब क्वालीफायर के null_globसाथ अपने पैटर्न के लिए विकल्प चालू करें N

list_of_files=(*(N))

यदि आप स्क्रिप्ट या फ़ंक्शन के सभी पैटर्न पर ऐसा कर रहे हैं, तो null_globविकल्प को चालू करें :

setopt null_glob

इस जवाब में bash और ksh समतुल्य हैं।

उपयोग printया कमांड प्रतिस्थापन न करें ! यह स्ट्रिंग की एक सूची के बजाय उनके बीच रिक्त स्थान के साथ फ़ाइल नामों से मिलकर एक स्ट्रिंग उत्पन्न करता है। (देखें शब्द विभाजन क्या है? शेल प्रोग्रामिंग में क्यों महत्वपूर्ण है? )


15

बेहतर तरीका for a in *(.N); do ... ; done:। N विकल्प बनाता है zsh एक खाली सूची देने के लिए, और शून्य बार पुनरावृति करेगा।

के लिए बाहर देखो ls *.foo(.N); जब ls एक रिक्त तर्क सूची प्राप्त करता है, तो यह सभी फ़ाइलों को बिना किसी के बजाय सूचीबद्ध करता है। यही कारण है कि मुझे NULL_GLOB (या इसके बैश समतुल्य) पसंद नहीं है: यह सभी ग्लब्स को बदल देता है और कॉल को आसानी से उदा।


फैंसी आपका जवाब यहाँ @arnt देखकर, बस मुझे यही चाहिए।
gtd

क्यों .में (.N)? अन्य उत्तर अपने (N)आप में हैं, क्या अंतर है?
माइकल डोरस्ट

सवाल फाइलों के बारे में था, और .ग्लोब को केवल फाइलों से मिलान करने के लिए प्रतिबंधित करता है।
ARNT

4

मुझे लगता है कि आप NULL_GLOBविकल्प ढूंढ रहे हैं :

   NULL_GLOB (-G)
          If a pattern for filename generation has no matches, delete  the
          pattern  from  the  argument list instead of reporting an error.
          Overrides NOMATCH.

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.