गूंज कुछ फ़ाइलों के दो बार मेल क्यों है?


11
$ touch file{1..12}

$ echo *e{1..12}
file1 file2 file3 file4 file5 file6 file7 file8 file9 file10 file11 file12

$ echo *{1..12}
file1 file11 file12 file2 file3 file4 file5 file6 file7 file8 file9 file10 file11 file12

मुझे समझ नहीं आता कि ऐसा क्यों हो रहा है। कृपया कोई समझा सकता है?

जवाबों:


21

ब्रेस वाइल्डकार्ड पैटर्न नहीं हैं। बैश विस्तार के प्रलेखन की जाँच करें : ब्रेसिज़ को प्रक्रिया में बहुत पहले विस्तारित किया जाता है, और अंतिम चरण में वाइल्डकार्ड पैटर्न का विस्तार किया जाता है।

प्रारंभ में, आदेश दो शब्दों के होते हैं echo, *{1..12}। ब्रेस विस्तार के बाद आदेश 13 शब्द हैं: echo, *1, *2, ..., *12। फिर वाइल्डकार्ड पैटर्न का विस्तार किया जाता है। *1में समाप्त होने वाले फ़ाइल नामों की सूची में फैलता है 1, जिसमें न केवल शामिल है, file1बल्कि file11(जो बाद के क्रम में क्रमबद्ध है)। इसी तरह *2करने के लिए फैलता है file12और file2(इस क्रम में)। तो तुम मिल echo, file1, file11, file12, file2एक एकल फाइल का मिलान नहीं हुआ, और फिर अन्य वाइल्डकार्ड कि: file3, file4, ..., file12

¹ यदि आप मैनुअल के विवरण का अनुसरण करते हैं, तो अगले से अंतिम, लेकिन "उद्धरण हटाना" वास्तव में एक चीज नहीं है - उद्धरण विस्तार प्रक्रिया से पहले पार्स किए गए हैं।

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