ব্যাশ শেলে, যখন আপনি একটি ডলার চিহ্ন ব্যবহার করেন এবং একটি পরিবর্তনশীল নাম অনুসরণ করেন, শেল তার মান সহ ভেরিয়েবলটিকে প্রসারিত করে। শেলের এই বৈশিষ্ট্যটিকে প্যারামিটার সম্প্রসারণ বলা হয়।
কিন্তু পরামিতি সম্প্রসারণের আরও অনেক ফর্ম রয়েছে যা আপনাকে একটি প্যারামিটার প্রসারিত করতে এবং মান পরিবর্তন করতে বা সম্প্রসারণ প্রক্রিয়ায় অন্যান্য মানগুলিকে প্রতিস্থাপন করতে দেয়। এই নিবন্ধে, আসুন আমরা পর্যালোচনা করি কিভাবে স্ট্রিং ম্যানিপুলেশন অপারেশনের জন্য প্যারামিটার সম্প্রসারণ ধারণা ব্যবহার করা যায়।
এই নিবন্ধটি চলমান ব্যাশ টিউটোরিয়াল সিরিজের অংশ। বাশ { } সম্প্রসারণ সম্পর্কে আমাদের আগের নিবন্ধটি পড়ুন৷
1. ব্যাশ শেল স্ক্রিপ্টের ভিতরে স্ট্রিং দৈর্ঘ্য সনাক্ত করুন
${#string} উপরের বিন্যাসটি প্রদত্ত ব্যাশ ভেরিয়েবলের দৈর্ঘ্য পেতে ব্যবহৃত হয়।
$ cat len.sh
#! /bin/bash
var="Welcome to the geekstuff"
echo ${#var}
$ ./len.sh
24
ব্যাশ ভেরিয়েবল সম্পর্কে আরও বুঝতে, 6টি ব্যবহারিক ব্যাশ গ্লোবাল এবং স্থানীয় পরিবর্তনশীল উদাহরণ পড়ুন।
2. ব্যাশ শেল স্ক্রিপ্টের ভিতরে একটি ভেরিয়েবল থেকে একটি সাবস্ট্রিং বের করুন
Bash একটি স্ট্রিং থেকে একটি সাবস্ট্রিং বের করার একটি উপায় প্রদান করে। নিম্নলিখিত উদাহরণটি ব্যাখ্যা করে যে কীভাবে একটি নির্দিষ্ট অবস্থান থেকে শুরু করে n অক্ষরগুলিকে পার্স করতে হয়।
${string:position} $position
এ $string থেকে সাবস্ট্রিং বের করুন <কেন্দ্র> কেন্দ্র>${string:position:length} $position থেকে শুরু করে $string থেকে $length অক্ষর সাবস্ট্রিং বের করুন। নীচের উদাহরণে, প্রথম ইকো স্টেটমেন্ট 15 তম অবস্থান থেকে শুরু হওয়া সাবস্ট্রিং প্রদান করে। দ্বিতীয় ইকো স্টেটমেন্ট 15 তম অবস্থান থেকে শুরু করে 4 টি অক্ষর প্রদান করে। দৈর্ঘ্য শূন্যের চেয়ে বড় বা সমান হওয়া উচিত।
$ cat substr.sh
#! /bin/bash
var="Welcome to the geekstuff"
echo ${var:15}
echo ${var:15:4}
$ ./substr.sh
geekstuff
geek
এছাড়াও, $*, $@, $#, $$, $!, $?, $-, $_ bash বিশেষ প্যারামিটার সম্পর্কে আরও বুঝতে আমাদের আগের নিবন্ধটি পড়ুন।
3. সংক্ষিপ্ততম সাবস্ট্রিং ম্যাচ
নিম্নলিখিত সিনট্যাক্স $string
এর সামনে থেকে $substring-এর সংক্ষিপ্ততম মিল মুছে দেয়${string#substring} নিম্নলিখিত সিনট্যাক্স $string
এর পিছনে থেকে $substring-এর সংক্ষিপ্ততম মিল মুছে দেয়${string%substring} নিম্নলিখিত নমুনা শেল স্ক্রিপ্ট উপরের দুটি সংক্ষিপ্ততম সাবস্ট্রিং ম্যাচ ধারণা ব্যাখ্যা করে৷
$ cat shortest.sh
#! /bin/bash
filename="bash.string.txt"
echo ${filename#*.}
echo ${filename%.*}
$ ./shortest.sh
After deletion of shortest match from front: string.txt
After deletion of shortest match from back: bash.string
প্রথম ইকো স্টেটমেন্টে সাবস্ট্রিং '*.' অক্ষর এবং একটি বিন্দুর সাথে মেলে এবং স্ট্রিংয়ের সামনে থেকে # স্ট্রিপ করে, তাই এটি "ব্যাশ" সাবস্ট্রিংটিকে স্ট্রিপ করে। ফাইলের নাম নামক ভেরিয়েবল থেকে। দ্বিতীয় ইকো স্টেটমেন্টে সাবস্ট্রিং '.*' ডট দিয়ে শুরু হওয়া সাবস্ট্রিং এর সাথে মেলে এবং স্ট্রিং এর পিছনের দিক থেকে % স্ট্রিপ, তাই এটি সাবস্ট্রিং '.txt'
মুছে দেয়।4. দীর্ঘতম সাবস্ট্রিং ম্যাচ
নিম্নলিখিত সিনট্যাক্স $string
এর সামনে থেকে $substring-এর দীর্ঘতম মিল মুছে দেয়${string##substring} নিম্নলিখিত সিনট্যাক্স $string
এর পিছনে থেকে $substring-এর দীর্ঘতম মিল মুছে দেয়${string%%substring} নিম্নলিখিত নমুনা শেল স্ক্রিপ্ট উপরের দুটি দীর্ঘতম সাবস্ট্রিং ম্যাচ ধারণা ব্যাখ্যা করে৷
$ cat longest.sh
#! /bin/bash
filename="bash.string.txt"
echo "After deletion of longest match from front:" ${filename##*.}
echo "After deletion of longest match from back:" ${filename%%.*}
$ ./longest.sh
After deletion of longest match from front: txt
After deletion of longest match from back: bash
উপরের উদাহরণে, ##*। '*.' এর জন্য দীর্ঘতম ম্যাচ স্ট্রিপ করে যা "bash.string" এর সাথে মেলে। তাই এটি স্ট্রিপ করার পরে, এটি অবশিষ্ট txt প্রিন্ট করে। এবং .
5. ব্যাশ শেল স্ক্রিপ্টের ভিতরে স্ট্রিং মান খুঁজুন এবং প্রতিস্থাপন করুন
শুধুমাত্র প্রথম ম্যাচ প্রতিস্থাপন করুন
${string/pattern/replacement} এটি ভেরিয়েবল $স্ট্রিং-এর প্যাটার্নের সাথে মেলে এবং প্রতিস্থাপনের সাথে প্যাটার্নের শুধুমাত্র প্রথম মিলটি প্রতিস্থাপন করে।
$ cat firstmatch.sh
#! /bin/bash
filename="bash.string.txt"
echo "After Replacement:" ${filename/str*./operations.}
$ ./firstmatch.sh
After Replacement: bash.operations.txt
সমস্ত ম্যাচ প্রতিস্থাপন করুন
${string//pattern/replacement} এটি প্রতিস্থাপনের সাথে প্যাটার্নের সমস্ত মিল প্রতিস্থাপন করে।
$ cat allmatch.sh
#! /bin/bash
filename="Path of the bash is /bin/bash"
echo "After Replacement:" ${filename//bash/sh}
$ ./allmatch.sh
After Replacement: Path of the sh is /bin/sh
সন্ধান এবং প্রতিস্থাপন সম্পর্কে নেওয়া, আমাদের পূর্ববর্তী নিবন্ধগুলি পড়ুন - sed বিকল্প উদাহরণ এবং Vim খুঁজুন এবং প্রতিস্থাপন করুন৷
শুরু এবং শেষ প্রতিস্থাপন করুন
${string/#pattern/replacement} নিম্নলিখিত সিনট্যাক্স প্রতিস্থাপন স্ট্রিং দিয়ে প্রতিস্থাপিত হয়, শুধুমাত্র যখন প্যাটার্নটি $স্ট্রিং এর শুরুতে মেলে।
${string/%pattern/replacement} নিম্নলিখিত সিনট্যাক্স প্রতিস্থাপন স্ট্রিং দিয়ে প্রতিস্থাপিত হয়, শুধুমাত্র যখন প্রদত্ত $স্ট্রিং-এর শেষে প্যাটার্ন মেলে।
$ cat posmatch.sh
#! /bin/bash
filename="/root/admin/monitoring/process.sh"
echo "Replaced at the beginning:" ${filename/#\/root/\/tmp}
echo "Replaced at the end": ${filename/%.*/.ksh}
$ ./posmatch.sh
Replaced at the beginning: /tmp/admin/monitoring/process.sh
Replaced at the end: /root/admin/monitoring/process.ksh
প্রস্তাবিত পড়া
Bash 101 হ্যাকস, রমেশ নটরাজন দ্বারা . আমি আমার বেশিরভাগ সময় লিনাক্স পরিবেশে ব্যয় করি। সুতরাং, স্বাভাবিকভাবেই আমি ব্যাশ কমান্ড লাইন এবং শেল স্ক্রিপ্টিংয়ের একটি বিশাল ভক্ত। 15 বছর আগে, যখন আমি *nix-এর বিভিন্ন ফ্লেভারে কাজ করতাম, তখন আমি C shell এবং Korn shell-এ প্রচুর কোড লিখতাম। পরবর্তী বছরগুলিতে, যখন আমি সিস্টেম প্রশাসক হিসাবে লিনাক্সে কাজ শুরু করি, তখন আমি ব্যাশ শেল স্ক্রিপ্টিং ব্যবহার করে সম্ভাব্য প্রতিটি কাজ স্বয়ংক্রিয়ভাবে করেছি। আমার ব্যাশ অভিজ্ঞতার উপর ভিত্তি করে, আমি ব্যাশ 101 হ্যাকস ইবুক লিখেছি যাতে ব্যাশ কমান্ড লাইন এবং শেল স্ক্রিপ্টিং উভয় ক্ষেত্রেই 101টি ব্যবহারিক উদাহরণ রয়েছে। আপনি যদি ব্যাশকে আয়ত্ত করার কথা ভাবছেন, তাহলে নিজের উপকার করুন এবং এই বইটি পড়ুন, যা আপনাকে আপনার ব্যাশ কমান্ড লাইন এবং শেল স্ক্রিপ্টিংয়ের নিয়ন্ত্রণ নিতে সাহায্য করবে৷