2015-07-29 5 views
7

मैं इस विस्तार कि हैरान था:बैश टिल्ड * सबस्ट्रिंग * विस्तार - अनियंत्रित सुविधा?

$ echo "${foo:~abc}" 

रिक्त स्ट्रिंग झुकेंगे जब foo सेट नहीं था। मुझे उम्मीद थी कि यह इस तरह पार्स होगा:

$ echo "${foo:(~abc)}" 

और स्ट्रिंग "~ एबीसी" उत्पन्न करें। लेकिन इसके बजाय, मैंने पाया है कि अगर मैं किया परिभाषित

$ foo='abcdefg' 
$ echo "${foo:~abc}" 
g 

वास्तव में, यह "abc" गणित संदर्भ में ले रही है और कर रहा है। "${foo:~0}"। इसी तरह

$ foo='abcdefg' 
$ echo "${foo:~3}" 
defg 

यह आपको विस्तार के अंतिम एन + 1 वर्ण प्राप्त करता है। मैंने मैनपेज के "पैरामीटर विस्तार" खंड में देखा। मुझे वहां टिल्ड्स का कोई जिक्र नहीं है। Bash Hackers Wiki केवल टिल्डों को (मामूली दस्तावेज) केस संशोधक के रूप में उल्लेख करता है।

यह व्यवहार कम से कम 3.2.57 पर वापस चला जाता है।

मैं बस याद आ रही हूँ जहाँ सबस्ट्रिंग विस्तार के लिए इस प्रपत्र प्रलेखित है, या यह सब पर दर्ज नहीं किया है?

+1

के बाद से ': ~' मौजूद नहीं है मुझे लगता है कि यह '$ के रूप में पार्स हो जाता है {parameter: ऑफसेट: लंबाई}' विस्तार-स्ट्रिंग के बाद से यह वाक्य रचना में निकटतम है हालांकि 'offset' एक अजीब मूल्य हो जाता है। और यही कारण है कि आप एक सबस्ट्रिंग प्राप्त कर रहे हैं। प्रलेखन [शैल पैरामीटर विस्तार "के तहत [बैश रेफरेंस मैनुअल] में है (https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html) – KurzedMetal

उत्तर

8

यह अनियंत्रित नहीं है (आप ${foo:~abc} को ${foo-~abc} के साथ भ्रमित कर रहे हैं)।

${parameter:offset} 
${parameter:offset:length} 
    Substring Expansion. Expands to up to length characters of the 
    value of parameter starting at the character specified by off- 
    set. [...] If length is omitted, expands to the substring of the 
    value of parameter starting at the character specified by offset 
    and extending to the end of the value. length and offset are 
    arithmetic expressions (see ARITHMETIC EVALUATION below). 

यहाँ, ~abc विस्तार की भरपाई क्षेत्र है, और ~ अंकगणितीय अभिव्यक्ति में बिटवाइज़ निषेध ऑपरेटर है। एक अपरिभाषित पैरामीटर अंकगणितीय अभिव्यक्ति में 0 का मूल्यांकन करता है, और ~0 == -1

+0

अच्छी तरह से पता चला। मुझे अभी एहसास हुआ था कि यह किसी भी तरह से संख्या को "उलटा" लग रहा था लेकिन अभी तक यह पता नहीं लगा था। –

+0

आह, मैंने इस बात का बहुत अधिक रहस्यवाद किया कि इसे कैसे पार्स किया जा रहा था। धन्यवाद! – kojiro

संबंधित मुद्दे