উত্তর:
FILE=$(basename "${1/%.jpeg/.jpg}") আমার জন্য কাজ।
পরীক্ষা:
bash-$ ./test.sh /tmp/foo.jpeg
foo.jpg
স্ক্রিপ্ট সামগ্রী:
bash-$ cat test.sh
#!/usr/bin/bash
FILE=$(basename "${1/%.jpeg/.jpg}")
echo "$FILE"
আপনি বাশে বাসা বাঁধতে পারবেন না (zsh ছাড়া ksh, ছাই এবং অন্যান্য শেলগুলিতেও নয়) est এটি কেবল একটি প্রসাধনী সীমাবদ্ধতা, যেহেতু আপনি বর্ণনা করেছেন আপনি একটি অস্থায়ী ভেরিয়েবলের মধ্যে একটি মধ্যবর্তী ভাবটি নির্ধারণ করতে পারেন। এটি ওয়ান-লাইনারদের জন্য কিছুটা বিরক্তিকর, তবে স্ক্রিপ্টগুলিতে এটি পাঠযোগ্যতার জন্য তর্কযোগ্যভাবে ভাল।
আপনি বাহ্যিক ইউটিলিটি ব্যবহার এড়াতে basenameএবং তার পরিবর্তে স্ট্রিং ম্যানিপুলেশন কনস্ট্রাক্ট ব্যবহার করতে পারেন:
FILE="${1##*/}"; FILE="${FILE/%.jpeg/.jpg}"
এখানে, এটি ঘটে যে আপনি বাইরের কমান্ড প্রতিস্থাপনের জন্য আপনার স্ক্রিপ্টটি পুনরায় লিখতে পারেন । এটি কোনও সাধারণ ঘটনা নয়, আপনি নির্দিষ্ট ওয়ান-লাইনের অনুভূতি বাদে অন্য কিছু অর্জন করতে পারেন না।
Zsh, আরও ভাল বা আরও খারাপের জন্য, আপনাকে বাসা বাড়াতে দেয়:
FILE=${$(basename $1)/%.jpeg/.jpg} # using basename
FILE=${${1##*/}/%.jpeg/.jpg} # using string rewriting
অথবা আপনি এর পরিবর্তে zsh এর অন্তর্নির্মিত নির্মাণ ব্যবহার করতে পারেন basename:
FILE=${${1:t}/%.jpeg/.jpg}
লাইন
FILE=$(basename "${1/%.jpeg/.jpg}")
সংক্ষিপ্ত এবং আরও বহনযোগ্য সঙ্গে তৈরি করা যেতে পারে
FILE=$(basename "${1%.jpeg}.jpg")
sedতবে অবশ্যই আমার ধারণা ess