ज्यादातर ऐतिहासिक कारणों से, बैश काफी वाक्यविन्यास और प्रोग्रामिंग प्रतिमानों का एक शौक-चकमा है - यह इसे अजीब और कभी-कभी गोल्फ के लिए निराशाजनक बना सकता है। हालांकि इसकी आस्तीन में कुछ चालें होती हैं जो अक्सर अन्य मुख्यधारा की स्क्रिप्ट के साथ प्रतिस्पर्धा कर सकती हैं। भाषाओं। इनमें से एक ब्रेस विस्तार है ।
ब्रेस विस्तार के दो मूल प्रकार हैं:
- सूची ब्रेसिज़ में मनमाने तार (डुप्लिकेट और खाली स्ट्रिंग सहित) की अल्पविराम से अलग की गई सूची हो सकती है। उदाहरण के लिए (खाली तारों के चारों ओर रिक्त स्थान पर ध्यान दें) का
{a,b,c,,pp,cg,pp,}
विस्तार होगाa b c pp cg pp
। - अनुक्रम ब्रेसिज़ अनुक्रम एंडपॉइंट द्वारा अलग हो सकते हैं
..
। वैकल्पिक रूप से एक और..
का पालन कर सकते हैं, एक कदम आकार के बाद। अनुक्रम समापन बिंदु पूर्णांक या वर्ण हो सकते हैं। अनुक्रम स्वचालित रूप से चढ़ेगा या उतरेगा जिसके अनुसार समापन बिंदु अधिक है। उदाहरण के लिए:{0..15}
तक विस्तार होगा0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
{-10..-5}
तक विस्तार होगा-10 -9 -8 -7 -6 -5
{3..-6..2}
तक विस्तार होगा3 1 -1 -3 -5
{a..f}
तक विस्तार होगाa b c d e f
{Z..P..3}
तक विस्तार होगाZ W T Q
इसके अलावा, अनुक्रम और सूची ब्रेसिज़ सूची ब्रेसिज़ के साथ मौजूद हो सकते हैं:
{a,b,{f..k},p}
तक विस्तार होगाa b f g h i j k p
{a,{b,c}}
तक विस्तार होगाa b c
ब्रेस गैर-व्हाट्सएप तारों के साथ दोनों ओर विस्तारित होते हैं। उदाहरण के लिए:
c{a,o,ha,}t
तक विस्तार होगाcat cot chat ct
यह एक साथ कई ब्रेसिज़ के लिए भी काम करता है:
{ab,fg}{1..3}
तक विस्तार होगाab1 ab2 ab3 fg1 fg2 fg3
यह काफी जटिल हो सकता है। उदाहरण के लिए:
{A..C}{x,{ab,fg}{1..3},y,}
तक विस्तार होगाAx Aab1 Aab2 Aab3 Afg1 Afg2 Afg3 Ay A Bx Bab1 Bab2 Bab3 Bfg1 Bfg2 Bfg3 By B Cx Cab1 Cab2 Cab3 Cfg1 Cfg2 Cfg3 Cy C
हालांकि, अगर विस्तार के बीच व्हाट्सएप है, तो वे बस अलग-अलग विस्तार के रूप में विस्तार करते हैं। उदाहरण के लिए:
{a..c} {1..5}
तक विस्तार होगाa b c 1 2 3 4 5
ध्यान दें कि ऑर्डर हमेशा कैसे संरक्षित किया जाता है।
इस चुनौती के लिए प्रविष्टियाँ बैश ब्रेस विस्तार का विस्तार करेगी जैसा कि ऊपर वर्णित है। विशेष रूप से:
- द्वारा
bash
(या अन्य गोले जो समान विस्तार करते हैं) की अनुमति नहीं है - अनुक्रम ब्रेसिज़ हमेशा नंबर-टू-नंबर, लोअरकेस-टू-लोअरकेस या अपरकेस-टू-अपरकेस होगा जिसमें कोई मिश्रण नहीं होगा। नंबर 32-बिट हस्ताक्षरित सीमा में पूर्णांक होंगे। यदि दिया जाता है, तो वैकल्पिक चरण आकार हमेशा एक सकारात्मक पूर्णांक होगा। (ध्यान दें कि बैश का भी विस्तार होगा
{A..z}
, लेकिन इस चुनौती के लिए इसे नजरअंदाज किया जा सकता है) - सूची ब्रेसिज़ में अलग-अलग आइटम हमेशा केवल ऊपरी और निचले मामले के अल्फ़ान्यूमेरिक वर्ण (खाली स्ट्रिंग शामिल) से बने होंगे
- सूची ब्रेस में अन्य ब्रेस विस्तार के मनमाने ढंग से घोंसले हो सकते हैं
- ब्रेसिज़ को मनमाने ढंग से संख्या के आधार पर समवर्ती किया जा सकता है। यह आपकी भाषा की मेमोरी द्वारा सीमित होगा, इसलिए यह अपेक्षा की जाती है कि आप सैद्धांतिक रूप से संख्या की मनमानी कर सकते हैं, लेकिन यदि / जब आप स्मृति से बाहर निकलते हैं जो आपके खिलाफ नहीं गिना जाएगा।
ऊपर दिए गए पाठ में उदाहरण वृषण के रूप में कार्य करते हैं। संक्षेप, आउटपुट की एक ही लाइन के अनुरूप इनपुट की प्रत्येक पंक्ति के साथ, वे हैं:
इनपुट
{0..15}
{-10..-5}
{3..-6..2}
{a..f}
{Z..P..3}
{a,b,{f..k},p}
{a,{b,c}}
c{a,o,ha,}t
{ab,fg}{1..3}
{A..C}{x,{ab,fg}{1..3},y,}
{a..c} {1..5}
{a{0..100..10},200}r
उत्पादन
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
-10 -9 -8 -7 -6 -5
3 1 -1 -3 -5
a b c d e f
Z W T Q
a b f g h i j k p
a b c
cat cot chat ct
ab1 ab2 ab3 fg1 fg2 fg3
Ax Aab1 Aab2 Aab3 Afg1 Afg2 Afg3 Ay A Bx Bab1 Bab2 Bab3 Bfg1 Bfg2 Bfg3 By B Cx Cab1 Cab2 Cab3 Cfg1 Cfg2 Cfg3 Cy C
a b c 1 2 3 4 5
a0r a10r a20r a30r a40r a50r a60r a70r a80r a90r a100r 200r