BASH শেল সম্পর্কে শেষ দুটি আর্টিকেল যেখানে আমরা ভেরিয়েবল বিস্তারিত আলোচনা করেছিলাম সেগুলো আমাদের পাঠকদের মধ্যে অত্যন্ত প্রশংসিত ছিল। আমরা Tecmint-टीम আপনাদের সাথে লেটেস্ট, আপ-টু-ডেট এবং প্রাসঙ্গিক টপিক বিস্তারিত কভার করার জন্য খুব উদ্যোগী। আরো, আমরা সবসময় সংশ্লিষ্ট টপিকের মেজর পার্সপেক্টিভ ছুঁতে চেষ্টা করি।
এখানে লিনাক্স ভেরিয়েবল সম্পর্কে শেষ আর্টিকেল যেখানে আমরা ভেরিয়েবল সাবস্টিটিউশন এবং শেলে প্রিডিফাইন করা ভেরিয়েবল দেখব এই টপিক বন্ধ করার আগে।
Bash কমান্ড আসলে এক্সিকিউট হওয়ার আগে ভেরিয়েবল সাবস্টিটিউশন পারফর্ম করে। লিনাক্স Bash শেল সব '$' সাইন খুঁজে বের করে কমান্ড এক্সিকিউট করার আগে এবং সেটি ভেরিয়েবলের মান দিয়ে প্রতিস্থাপন করে। Bash ভেরিয়েবল সাবস্টিটিউশন প্রক্রিয়া শুধু একবার পারফর্ম করা হয়। যদি আমাদের নেস্টেড ভেরিয়েবল থাকে তবে কী?
নোট: নেস্টেড ভেরিয়েবল বলতে আমরা মানে, ভেরিয়েবল ভেরিয়েবলের ভিতরে ঘোষণা করা। উপরের সিনেরিওটি নিচের উদাহরণে দেখি।
নিচের মত একটি ভেরিয়েবল ডিক্লেয়ার করুন যা Read-Only এবং Executable।
admin@wsxdn.com:~$ declare -rx Linux_best_website="www.tecmint.com"
ভেরিয়েবলে সংরক্ষিত মান চেক করুন।
admin@wsxdn.com:~$ printf "%s" "$Linux_best_website" www.tecmint.com
এখন আরেকটি ভেরিয়েবল ডিক্লেয়ার করুন যা আবার Read-Only এবং Executable।
admin@wsxdn.com:~$ declare -rx Linux_website="Linux_best_website"
এখন পরিস্থিতি হলো, আমরা দুটি ভেরিয়েবল ডিফাইন করেছি।
'Linux_best_website', যার মান "www.tecmint.com"
এবং, 'Linux_website', যার মান "Linux_best_website"
নিচের এক-লাইন কমান্ডটি রান করলে ফলাফল কী হবে?
admin@wsxdn.com:~$ printf "%s" "$Linux_website"
এটি প্রথম ভেরিয়েবল '$Linux_website'-কে মান "Linux_best_website" দিয়ে প্রতিস্থাপন করা উচিত এবং তারপর "$Linux_best_website" আবার একটি ভেরিয়েবল যার মান "www.tecmint.com"। তাই নিচের কমান্ড রান করলে চূড়ান্ত আউটপুট হওয়া উচিত।
admin@wsxdn.com:~$ printf "%s" "$Linux_website" www.tecmint.com
দুর্ভাগ্যবশত, এটি পরিস্থিতি নয়, আউটপুট যা আমরা পাচ্ছি Linux_best_website।
কারণ? হ্যাঁ! Bash ভেরিয়েবলের মান শুধু একবার সাবস্টিটিউট করে। জটিল স্ক্রিপ্ট এবং প্রোগ্রামের ক্ষেত্রে কী হবে যেখানে আমাদের ঘন ঘন ভেরিয়েবল সাবস্টিটিউট করতে হয় সেইসাথে ভেরিয়েবল একাধিকবার সাবস্টিটিউট করতে হয়?
এখানে 'eval' কমান্ডটি আসে যা স্ক্রিপ্টে একাধিকবার ভেরিয়েবল সাবস্টিটিউশনের অতিরিক্ত কাজ করে। পুরো কাজকর্ম কাঁচের মতো স্পষ্ট করতে একটি উদাহরণ।
x নামক একটি ভেরিয়েবল ডিক্লেয়ার করুন যার মান 10।
admin@wsxdn.com:~/Desktop$ declare x=10
ভেরিয়েবল x-এর মান চেক করুন যা আমরা এখন ডিফাইন করলাম।
admin@wsxdn.com:~/Desktop$ echo $yx x 10
y নামক একটি ভেরিয়েবল ডিক্লেয়ার করুন যার মান x।
admin@wsxdn.com:~/Desktop$ declare y=x
ভেরিয়েবল y-এর মান চেক করুন যা আমরা এখন ডিফাইন করলাম।
admin@wsxdn.com:~/Desktop$ echo $y x
এখানে BASH-এর একবার ভেরিয়েবল সাবস্টিটিউশন সমস্যা, যা অতিরিক্ত রাউন্ড ভেরিয়েবল সাবস্টিটিউশন পারফর্ম করে না। আমরা 'eval' কমান্ড ব্যবহার করছি এটিকে ফিক্স করতে।
admin@wsxdn.com:~/Desktop$ eval y=$x
এখন ভেরিয়েবল 'y'-এর মান চেক করুন।
admin@wsxdn.com:~/Desktop$ echo $y 10
হুর্রে! সমস্যাটি ফিক্স হয়ে গেল এবং 'eval' কমান্ডটি রেস জিতলো :)
মেনশন করার দরকার নেই, 'eval' কমান্ড বড় স্ক্রিপ্ট প্রোগ্রামে খুব হেল্পফুল এবং একটি খুব হ্যান্ডি টুল।
এই পোস্টের শেষ কিন্তু সবচেয়ে কম না হলো অংশ হল BASH প্রিডিফাইনড ভেরিয়েবল। না! এই লিস্ট দেখে প্যানিক করবেন না। আপনি কখনো পুরো লিস্ট মনে রাখতে হবে না স্ক্রিপ্ট লেখা শুরু করার আগে কিছু ছাড়া। লার্নিং প্রসেসের অংশ হিসেবে, আমরা BASH প্রিডিফাইনড ভেরিয়েবল লিস্ট প্রেজেন্ট করছি।
| নং. | BASH ভেরিয়েবল | ফলাফল |
| ১ | auto_resume | স্টপড জবের জন্য কমান্ড কমপ্লিশন প্রসেস করে। |
| ২ | BASH | শেলের পথ। |
| ৩ | BASH_ENV | প্রোফাইল ফাইলের নাম দেখায়। |
| ৪ | BASH_VERSION | Bash-এর ভার্সন দেখায়। |
| ৫ | BASH_VERSINFO | বিস্তারিত ভার্সন ইনফরমেশন দেখায়। |
| ৬ | BASH_VERSINFO[0] | মেজর ভার্সন নম্বর (রিলিজ)। |
| ৭ | BASH_VERSINFO[1] | মাইনর ভার্সন নম্বর (ভার্সন)। |
| ৮ | BASH_VERSINFO[2] | প্যাচ লেভেল। |
| ৯ | BASH_VERSINFO[3] | বিল্ড ভার্সন। |
| ১০ | BASH_VERSINFO[4] | রিলিজ স্ট্যাটাস (উদাহরণস্বরূপ, beta1)। |
| ১১ | BASH_VERSINFO[5] | MACHTYPE-এর মান। |
| ১২ | CDPATH | কলন দিয়ে আলাদা করা ডিরেক্টরির লিস্ট। |
| ১৩ | COLUMNS | স্ট্যান্ডার্ড আউটপুটে প্রতি লাইন ক্যারেক্টার সংখ্যা। |
| ১৪ | EUID | বর্তমান ব্যবহারকারীর ইউজার আইডি। |
| ১৫ | FCEDIT | fc কমান্ডের জন্য ডিফল্ট টেক্সট এডিটর। |
| ১৬ | FUNCNAME | ফাংশনের নাম। |
| ১৭ | GROUPS | যে গ্রুপগুলোর সদস্য ব্যবহারকারী। |
| ১৮ | HISTFILE | কমান্ড হিস্টরি ধারণকারী ফাইল। |
| ১৯ | HOME | আপনার হোম ডিরেক্টরির নাম। |
| ২০ | LINES | স্ট্যান্ডার্ড আউটপুটে হরিজেন্টাল লাইনের সংখ্যা। |
| ২১ | ইনকামিং মেইল চেক করার ফাইলের নাম। | |
| ২২ | OSTYPE | অপারেটিং সিস্টেমের নাম। |
| ২৩ | OLDPWD | পূর্বের ওয়ার্কিং ডিরেক্টরি। |
| ২৪ | PWD | বর্তমান ওয়ার্কিং ডিরেক্টরি। |
| ২৫ | RANDOM | একটি র্যান্ডম নম্বর প্রিন্ট করে। |
| ২৬ | SHELL | ব্যবহার করার পছন্দের শেল। |
| ২৭ | TIMEFORMAT | time কমান্ডের ফরম্যাট। |
| ২৮ | UID | বর্তমান ব্যবহারকারীর আইডি। |
প্রিডিফাইনড BASH ভেরিয়েবলের একটি বিশাল লিস্ট রয়েছে। আমরা সবচেয়ে ঘন ঘন ব্যবহৃত مواردের একটি লিস্ট প্রডিউস করার চেষ্টা করেছি।
আজ এপর্যন্ত। আমি আবার এখানে আসব আরেকটি আকর্ষণীয় আর্টিকেল নিয়ে। তখন পর্যন্ত টিউন্ড এবং কানেক্টেড থাকুন TecMint-এর সাথে। কমেন্ট সেকশনে আপনার মূল্যবান ফিডব্যাক দিতে ভুলবেন না।