হালনাগাদ
বাগ-ব্যাশ মেলিং তালিকার কেউ নিশ্চিত করেছেন যে এটি একটি বাগ।
যদি কারও আগ্রহী হয় তবে সর্বশেষ প্রতিশ্রুতিটি বিকাশ করতে একটি ফিক্স পাওয়া যায় ।
যদিও
bash -c 'echo "${1##*""}"' _ bar
খালি লাইন ছাপায়,
bash -c 'echo "${1##*"${1##*}"}"' _ bar
কপি করে প্রিন্ট bar।
আমি এটা বুঝতে পারি না। ${1##*}একটি খালি স্ট্রিংয়ে প্রসারিত হয়, তাই "${1##*}"ঠিক যেমন আচরণ করা উচিত ""তবে বাশ মনে হয় না বলে মনে হয়।
অন্যান্য জনপ্রিয় shবাস্তবায়নের মধ্যে এটি সম্পর্কে একটি beক্যমত্য বলে মনে হচ্ছে :
$ 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)একটি খালি স্ট্রিং প্রিন্ট করে