url=http://www.foo.bar/file.ext; echo ${url##/*}
আমি এই কোডটি মুদ্রণের প্রত্যাশা করেছি file.ext
, তবে এটি পুরো URL টি মুদ্রণ করে। কেন? আমি কীভাবে ফাইলটির নাম বের করতে পারি?
dirname $url
। বা grep -o 'http://[^/]*' <<<$url
।
url=http://www.foo.bar/file.ext; echo ${url##/*}
আমি এই কোডটি মুদ্রণের প্রত্যাশা করেছি file.ext
, তবে এটি পুরো URL টি মুদ্রণ করে। কেন? আমি কীভাবে ফাইলটির নাম বের করতে পারি?
dirname $url
। বা grep -o 'http://[^/]*' <<<$url
।
উত্তর:
কারণ শব্দটি ছাঁটাতে স্ট্রিংয়ের সাথে মিলাতে হবে। এটি দেখতে হবে:
url="http://www.foo.bar/file.ext"; echo "${url##*/}"
ধন্যবাদ ডারোবার্ট, আপনি আমাকে সঠিক দিকে চালিত করেছেন।
মানচিত্রটি উদ্ধৃত করতে:
${parameter##word}
Remove matching prefix pattern. The word is expanded to produce
a pattern just as in pathname expansion. If the pattern matches
the beginning of the value of parameter, […]
/*
শুরুতে সাথে মেলে না, কারণ আপনার URL দিয়ে শুরু হয় h
না /
।
একটি তুচ্ছ ভাবে আপনি (আপনার মন্তব্য অনুযায়ী) যা খুঁজছেন তা করতে হয় echo "$url" | rev | cut -d / -f 1 | rev
। তবে অবশ্যই, এটি ইউআরএলগুলির একটি স্ল্যাশে শেষ হওয়ার জন্য আকর্ষণীয় ফলাফল দেবে।
আপনি যা চান তা করার আরেকটি উপায় হ'ল */
পরিবর্তে প্যাটার্নটি ব্যবহার করা।
basename
(1) ইউআরএল নিয়েও কাজ করে, যাতে আপনি কেবল এটি করতে পারেন:
url=http://www.foo.bar/file.ext; basename $url
আরও দেখুন: বাশ প্রসারিত গ্লোববিং , যদিও এই ক্ষেত্রে বর্ধিত গ্লোব অপরিহার্য নয়।
shopt -s extglob; url=http://www.foo.bar/file.ext; echo ${url##+(*/)}
আউটপুট: file.ext