गूंज [9876543210] 1 4 5 6 प्रदर्शित करता है ... क्यों?


19

कृपया बताएं कि अंतिम चार गूंज कथनों के लिए १ ४ ५ ६ क्यों प्रदर्शित किया गया है? मैंने इसे एक बार दुर्घटना से मारा, लेकिन मैं अब उत्सुक हूं कि यह व्यवहार क्यों होता है।

ये कथन अपेक्षित (मेरे लिए) काम करते हैं।

$ echo [ 9876543210 ]  
[ 9876543210 ]

$ echo [237890]  
[237890]

ये इको स्टेटमेंट लगातार 1 4 5 6. प्रदर्शित होते हैं। क्या इन नंबरों के बारे में कुछ खास है?

$ echo [9876543210]  
1 4 5 6

$ echo [abcd9876543210ghi]  
1 4 5 6

$ echo [-123456-]  
1 4 5 6

$ echo [-7654321-]  
1 4 5 6

धन्यवाद!

  • संभव डुप्लिकेट संबंधित और सहायक है, लेकिन डुप्लिकेट नहीं। संभव डुप्लिकेट एक rmकमांड के दृष्टिकोण से है । यह प्रश्न एक echoकमांड के कथित "अजीब व्यवहार" के परिप्रेक्ष्य से है । दोनों के लिए अंतर्निहित उत्तर ग्लोबिंग है। एक echoकमांड के साथ मुद्दों की खोज करने वाला कोई व्यक्ति आसानी से rmप्रश्न नहीं ढूंढेगा , लेकिन यहां अधिक संभावना होगी।

16
: यदि आप अपने वर्तमान निर्देशिका, नामित में 4 फ़ाइलें 1 4 5और6
जेफ स्कालर

5
लोल, मेटास्मोकेबड़बड़ाना .post / 58973 पर बॉट इस पोस्ट को स्पैम के रूप में चिह्नित करता है क्योंकि यह "शीर्षक में एक फोन नंबर है" ... वास्तव में?
कार्लो वुड

2
@CarloWood, दस लगातार अंक क्षेत्र कोड के साथ एक संयुक्त राज्य अमेरिका के फोन नंबर से मेल खाते हैं। सामान्य स्वरूपण का उपयोग करते हुए, यह 987-654-3210 होगा।
मार्क

1
ध्यान दें कि यदि आप चालू करते हैं nullglob, तो आपका दूसरा उदाहरण ( echo [237890]) वास्तव में कुछ भी नहीं छापेगा, जो एक सुराग हो सकता है जिसे आप अन्य उदाहरणों में ग्लोब-विस्तार देख रहे थे।
काइल स्ट्रैंड

3
के संभावित डुप्लिकेट के साथ [0-9] rm / ls का कार्य
muru

जवाबों:


33

खुला ब्रैकेट खोल के [लिए एक विशेष चरित्र है; यह एक पैटर्न मैचिंग एल्गोरिथ्म खोलता है जो कहता है "कोष्ठक के अंदर किसी भी वर्ण से मेल खाता है"। क्योंकि आपकी वर्तमान निर्देशिका में आपके नाम की 4 फाइलें हैं: 1, 4, 5, और 6, जब कोष्ठक के अंदर के वर्णों में से कोई भी अंक होता है, तो आपका शेल उन फ़ाइल नाम के साथ पैटर्न-मिलान को बदल देता है। आप के बजाय का उपयोग करते हैं echo [ 9876543210 ]तो आप 3 मानकों के साथ गूंज बुला रहे हैं: [, 9876543210, और ]

आपको अपने इको स्टेटमेंट के मापदंडों को खोल को एक पैटर्न मिलान अनुरोध के रूप में देखने से रोकने के लिए उद्धृत करना चाहिए।

$ echo '[9876543210]'
[9876543210]

(या 1, 4, 5, और 6 नामक फ़ाइलों को हटा दें - लेकिन यह व्यवहार को प्रदर्शित करने के लिए एक समाधान है, न कि एक फिक्स)।


4
शायद यह कहना बेहतर होगा कि तीन मापदंडों के साथ echo [ 987 ]कॉल echoकरने की तुलना में भी उल्लेख किया गया है test?
18

2
यह वास्तव में होगा! मैं अति-जवाब :(
जेफ स्कालर

1
* मैं भी अपने पहले उत्तर संस्करण को पसंद करता हूं, जैसा कि मैंने शुरू में विभिन्न परीक्षणों की गूंज बयानों की कोशिश करते समय इस पर चलाया था।
miked

1
मूल उत्तर भी सही नहीं है। उन्होंने लिखा: गूंज [9876543210]। [(इस प्रकार परीक्षण) का कोई भी आह्वान नहीं किया जाता है।
knezi

प्रमुख बिंदु यह है कि वर्ग कोष्ठक और उनके अंदर क्या है, इसके बीच रिक्त स्थान हैं या नहीं, इस पर निर्भर करते हुए तर्क echoकी व्याख्या अलग से की जाती bashहै। [123]बनाम [ 123 ]
jskroch
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.