পুরো পথ থেকে এক্সটেনশন ছাড়াই কীভাবে ফাইলের নাম বের করা যায়?


10

আমি আমার প্রথম বাশ স্ক্রিপ্টটি সঠিক করার চেষ্টা করছি, এবং এক পর্যায়ে ফাইলের নামটি স্ক্রিপ্ট হিসাবে প্রেরণ করা হবে $1। এক্সটেনশন ছাড়াই আমার ফাইলের নাম বের করা দরকার।
বর্তমানে, আমি ধরে নিচ্ছি যে সমস্ত এক্সটেনশন তিনটি অক্ষর তাই আমি ফাইলের নাম পেতে শেষ 4 টি অক্ষর মুছে ফেলি:

a="${1:0:-4}"

তবে %~n1উইন্ডোজের মতো তিনটি অক্ষরের বেশি থাকা এক্সটেনশনগুলির সাথে আমার কাজ করতে সক্ষম হওয়া প্রয়োজন ।
আর্গুমেন্ট থেকে এক্সটেনশন ছাড়াই ফাইলের নাম তোলার কোনও উপায় আছে কি?


উত্তর:


27

ব্যাশে এটি করার স্বাভাবিক উপায় হ'ল প্যারামিটার সম্প্রসারণ ব্যবহার করা। ( বাশ ম্যান পৃষ্ঠাটি দেখুন এবং "প্যারামিটার সম্প্রসারণ" অনুসন্ধান করুন))

a=${1%.*}

%প্যাটার্ন নিম্নলিখিত (মিলে যে সবকিছু ইঙ্গিত .*) ডান দিক থেকে, সবচেয়ে কম ম্যাচ সম্ভব ব্যবহার করে, পরামিতি থেকে মুছে দেওয়া হয় $1। এই ক্ষেত্রে, আপনার প্রকাশের চারপাশে ডাবল-কোট (") লাগবে না।


1
ফাইলের ধরণগুলি সাধারণতঃ এরকম: "সামথিং.ইং.েক্সট"। অবশ্যই এক্ষেত্রে এক্সটেনশনটি এক্সটেনশন, তবে $ {1%। * Using ব্যবহার করে কেবল "কিছু" অংশই ফিরে আসবে, তাই না?
ব্যবহারকারীর 304822

2
না । ${1%.*}ফিরে আসবে Something.eng। আপনি যদি ব্যবহার .সহ প্রথমটির ডানদিকে সমস্ত কিছু সরিয়ে ফেলতে চান তবে যা ফিরে আসবে । .${1%%.*}Something
গ্যারিজোহান


0

বেসনেম ব্যবহার না করে ব্যাশে ওয়ান-লাইনার :

$ s=/the/path/foo.txt
$ echo "$(b=${s##*/}; echo ${b%.*})"
foo
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.