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