[2-57]
एक चरित्र से मिलकर सेट है 2
, 3
, 4
, 5
और 7
वहाँ, zsh और हर दूसरे वाइल्डकार्ड और regexp वाक्य रचना में बाहर। आपका ग्लोब पैटर्न *[2-57]
हर फ़ाइल नाम से मेल खाता है जिसका अंतिम चरित्र उन पाँच अंकों में से एक है।
मुझे लगता है कि आप [m,n]
ग्लोब क्वालिफायर के सिंटैक्स को गलत बता रहे हैं । ग्लोब क्वालिफायर हमेशा पैटर्न के अंत में कोष्ठक में जाते हैं, और रेंज विभाजक अल्पविराम होता है। पैटर्न *([2,57])
2, 3,…, 57 वें मैच तक फैलता है। डिफ़ॉल्ट विस्तार आदेश लेक्सिकोग्राफ़िक है (कुछ विशेष जादू के साथ संख्यात्मक क्रम में संख्याओं को सॉर्ट करने के लिए यदि numeric_glob_sort
विकल्प सेट है); आप इसे o
या O
ग्लोब क्वालिफायर के साथ नियंत्रित कर सकते हैं (उदाहरण के *(om[2,57])
लिए हाल के एक फ़ाइल को छोड़कर 57 सबसे हाल की फ़ाइल से मिलान करना)।
for x in /foo/bar/*([2,57]); do print $x; done
भविष्य के पाठकों के लिए आपने जो नहीं पूछा, लेकिन संबंधित और संभवतः उपयोगी: यदि आप फ़ाइलों को 2 से 57 तक एनुमरेट करना चाहते हैं, तो वे मौजूद हैं या नहीं, आप रेंज ब्रेस अभिव्यक्ति का उपयोग कर सकते हैं । यह सुविधा बाश और क्ष में भी मौजूद है।
echo hello{2..57}
और यदि आप उन फ़ाइलों से मेल खाना चाहते हैं जिनके नाम में 2 और 57 के बीच की संख्या है, तो आप पैटर्न का उपयोग कर सकते हैं <2-57>
। यह zsh के लिए विशिष्ट है।
$ ls
file1 file2 file3 file57 file58
$ echo file<2-57>
file2 file3 file57
ध्यान दें कि एक पैटर्न जैसा *<2-57>
कि आप अपेक्षा करते हैं वैसा नहीं है, क्योंकि *
अंकों का भी मिलान हो सकता है। उदाहरण के लिए, file58
से मेल खाता है *<2-57>
, साथ file5
मिलान *
हिस्सा है और 8
मिलान <2-57>
हिस्सा। पैटर्न *[^0-9]<2-57>
इस मुद्दे से बचता है।