अपडेट करें
बग-बैश मेलिंग सूची में किसी ने पुष्टि की है कि यह बग है।
यदि किसी की रुचि है, तो नवीनतम शाखा को हटाने के लिए प्रतिबद्ध है ।
जबकि
bash -c 'echo "${1##*""}"' _ bar
एक खाली लाइन प्रिंट करता है,
bash -c 'echo "${1##*"${1##*}"}"' _ bar
प्रिंट करता है bar।
मुझे यह समझ में नहीं आता है। ${1##*}एक खाली स्ट्रिंग के लिए फैलता है, तो "${1##*}"बस के रूप ""में इलाज किया जाना चाहिए , लेकिन लगता है जैसे बैश ऐसा नहीं लगता है।
अन्य लोकप्रिय shकार्यान्वयनों में इस पर एक आम सहमति प्रतीत होती है :
$ sh -c 'echo "${1##*"${1##*}"}"' _ bar
$ ash -c 'echo "${1##*"${1##*}"}"' _ bar
$ dash -c 'echo "${1##*"${1##*}"}"' _ bar
$ ksh -c 'echo "${1##*"${1##*}"}"' _ bar
$ ksh93 -c 'echo "${1##*"${1##*}"}"' _ bar
$ mksh -c 'echo "${1##*"${1##*}"}"' _ bar
$ posh -c 'echo "${1##*"${1##*}"}"' _ bar
$ yash -c 'echo "${1##*"${1##*}"}"' _ bar
$ zsh -c 'echo "${1##*"${1##*}"}"' _ bar
$
बैश (साथ या बिना --posix) केवल एक ही है जो इसके अनुरूप नहीं है:
$ bash -c 'echo "${1##*"${1##*}"}"' _ bar
bar
और प्रसंस्करण के विकल्प के विकल्प के बिना व्यवहार अपेक्षित है:
$ bash -c 'echo "${1##*"${1+}"}"' _ bar
$ bash -c 'echo "${1##*"${2}"}"' _ bar
$ bash -c 'echo "${1##*"${2}"}"' _ bar ''
$
मैं वास्तव में आश्चर्य करता हूं कि क्या इसके लिए कोई स्पष्टीकरण है, जो मुझे मैनुअल में नहीं मिला। क्या यह बग है, या मानक की गलत व्याख्या है? क्या यह व्यवहार कहीं दस्तावेज है?
पुनश्च: मुझे पता है कि एक त्वरित समाधान आंतरिक पीई को कम करने के लिए है, लेकिन यह मेरे सवाल का जवाब नहीं देता है, और विशेष वर्ण वाले तार के साथ अवांछित परिणाम हो सकता है।
GNU bash, version 4.4.12(1)-release (x86_64-pc-linux-gnu)प्रिंट "बार"
4.4.12(3)-release, echo "${BASH##*"${BASH##*}"}"-> में /bin/bash। जबकि echo "\${BASH##*"${BASH##*}"}"-> ${BASH##*}और eval echo "\${BASH##*"${BASH##*}"}"-> रिक्त।
GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin18)एक खाली तार प्रिंट करता है