কম্পিউটার

ব্যাশে ভেরিয়েবল ব্যবহার করা

কম্পিউটার বিজ্ঞানে (এবং নৈমিত্তিক কম্পিউটিং), একটি ভেরিয়েবল হল মেমরির একটি অবস্থান যা পরবর্তীতে ব্যবহারের জন্য নির্বিচারে তথ্য ধারণ করে। অন্য কথায়, এটি একটি অস্থায়ী স্টোরেজ কন্টেইনার যা আপনার কাছে ডেটা রাখতে এবং ডেটা বের করে আনতে পারে। ব্যাশ শেলে, সেই ডেটা একটি শব্দ (একটি স্ট্রিং) হতে পারে , কম্পিউটার লিঙ্গোতে) বা একটি সংখ্যা (একটি পূর্ণসংখ্যা )।

আপনি আপনার কম্পিউটারে আগে কখনও (জ্ঞাতসারে) একটি ভেরিয়েবল ব্যবহার করেননি, তবে আপনি সম্ভবত আপনার জীবনের অন্যান্য ক্ষেত্রে একটি পরিবর্তনশীল ব্যবহার করেছেন। আপনি যখন "আমাকে এটি দিন" বা "এটি দেখুন" এর মতো জিনিসগুলি বলেন, আপনি ব্যাকরণগত ভেরিয়েবল ব্যবহার করছেন (আপনি সেগুলিকে সর্বনাম হিসাবে মনে করেন ), কারণ "এই" এবং "সে" এর অর্থ নির্ভর করে আপনি আপনার মনের মধ্যে যা কিছু চিত্রিত করছেন বা আপনি যা ইঙ্গিত করছেন তার উপর নির্ভর করে যাতে আপনার শ্রোতারা জানেন যে আপনি কী উল্লেখ করছেন৷ আপনি যখন গণিত করেন, তখন আপনি একটি অজানা মানের জন্য দাঁড়ানোর জন্য ভেরিয়েবল ব্যবহার করেন, যদিও আপনি সম্ভবত এটিকে একটি পরিবর্তনশীল বলবেন না।

এখানে একটি Bash ভেরিয়েবলের একটি দ্রুত এবং সহজ প্রদর্শন রয়েছে যা আপনি হয়তো প্রতিদিন ব্যবহার করছেন তা বুঝতে পারবেন না। PS1 আপনি কিভাবে আপনার টার্মিনাল প্রম্পট দেখাতে চান সে সম্পর্কে ভেরিয়েবল তথ্য রাখে। উদাহরণস্বরূপ, আপনি এটিকে খুব সাধারণ কিছুতে সেট করতে পারেন - যেমন শতাংশ চিহ্ন (% )—PS1 পুনরায় সংজ্ঞায়িত করে পরিবর্তনশীল:

$ PS1="% "
%

এই নিবন্ধটি Linux, BSD, Mac, বা Cygwin-এ চলমান একটি Bash শেলের ভেরিয়েবলগুলিকে সম্বোধন করে। Microsoft এর ওপেন সোর্স PowerShell ব্যবহারকারীদের PowerShell-এ ভেরিয়েবল সম্পর্কে আমার নিবন্ধটি উল্লেখ করা উচিত।

ভেরিয়েবল কিসের জন্য?

ব্যাশে আপনার ভেরিয়েবলের প্রয়োজন কিনা তা নির্ভর করে আপনি একটি টার্মিনালে কি করেন তার উপর। কিছু ব্যবহারকারীর জন্য, ভেরিয়েবলগুলি ডেটা পরিচালনার একটি অপরিহার্য মাধ্যম, অন্যদের জন্য সেগুলি গৌণ এবং অস্থায়ী সুবিধা, এবং এখনও অন্যদের জন্য, সেগুলি নাও থাকতে পারে৷

পরিশেষে, ভেরিয়েবল একটি টুল. আপনি যখন তাদের জন্য একটি ব্যবহার খুঁজে পান তখন আপনি সেগুলি ব্যবহার করতে পারেন, বা সেগুলি আপনার OS দ্বারা পরিচালিত হয় তা জেনে আরামে তাদের একা ছেড়ে দিন৷ যদিও জ্ঞান হল শক্তি, এবং বাশে ভেরিয়েবলগুলি কীভাবে কাজ করে তা বোঝা আপনাকে সমস্ত ধরণের অপ্রত্যাশিত সৃজনশীল সমস্যা সমাধানের দিকে নিয়ে যেতে পারে৷

কিভাবে একটি ভেরিয়েবল সেট করবেন

একটি ভেরিয়েবল তৈরি করতে আপনার বিশেষ অনুমতির প্রয়োজন নেই। এগুলি তৈরি করার জন্য বিনামূল্যে, ব্যবহারের জন্য বিনামূল্যে এবং সাধারণত নিরীহ। একটি ব্যাশ শেলে (লিনাক্স এবং ম্যাকে), আপনি একটি পরিবর্তনশীল নাম সংজ্ঞায়িত করে এবং তারপর এর মান সেট করে সেগুলি সেট করতে পারেন। নিম্নলিখিত উদাহরণটি FOO নামে একটি নতুন ভেরিয়েবল তৈরি করে এবং /home/seth/Documents স্ট্রিং-এ মান সেট করে :

$ declare FOO="/home/seth/Documents"

সাফল্য ভয়ঙ্করভাবে নীরব, তাই আপনি আত্মবিশ্বাসী বোধ করতে পারেন না যে আপনার পরিবর্তনশীল সেট করা হয়েছে। আপনি ইকো কমান্ড দিয়ে নিজের জন্য ফলাফল দেখতে পারেন , একটি ডলার চিহ্ন ($ ) ভেরিয়েবলটি ঠিক যেভাবে আপনি এটিকে সংজ্ঞায়িত করেছেন ঠিক সেইভাবে পড়া হয়েছে তা নিশ্চিত করতে, আপনি এটিকে ধনুর্বন্ধনী এবং উদ্ধৃতিতে মোড়ানোও করতে পারেন। এটি করার ফলে ভেরিয়েবলে উপস্থিত হতে পারে এমন কোনো বিশেষ অক্ষর সংরক্ষণ করা হয়; এই উদাহরণে, এটি প্রযোজ্য নয়, তবে এটি গঠন করা এখনও একটি ভাল অভ্যাস:

$ echo "${FOO}"
/home/seth/Documents

যারা প্রায়শই শেল ব্যবহার করে তাদের জন্য ভেরিয়েবল সেট করা একটি সাধারণ জিনিস হতে পারে, তাই প্রক্রিয়াটি কিছুটা অনানুষ্ঠানিক হয়ে উঠেছে। যখন একটি স্ট্রিং একটি সমান চিহ্ন দ্বারা অনুসরণ করা হয় (= ) এবং একটি মান, Bash শান্তভাবে ধরে নেয় যে আপনি একটি ভেরিয়েবল সেট করছেন, যার ফলে ডিক্লেয়ার কীওয়ার্ড অপ্রয়োজনীয়:

$ FOO="/home/seth/Documents"

ভেরিয়েবলগুলি সাধারণত এক সিস্টেম থেকে অন্য সিস্টেমে তথ্য পৌঁছে দেওয়ার জন্য বোঝানো হয়। এই সাধারণ উদাহরণে, আপনার ভেরিয়েবলটি খুব দরকারী নয়, তবে এটি এখনও তথ্য যোগাযোগ করতে পারে। উদাহরণস্বরূপ, কারণ FOO-এর বিষয়বস্তু ভেরিয়েবল হল একটি ফাইল পাথ, আপনি ভেরিয়েবলটিকে ~/ডকুমেন্টস-এর শর্টকাট হিসেবে ব্যবহার করতে পারেন ডিরেক্টরি:

$ pwd
/home/seth
$ cd "${FOO}"
$ pwd
/home/seth/Documents

ভেরিয়েবল যেকোনো অ-সংরক্ষিত স্ট্রিং হতে পারে (পূর্ণসংখ্যা এবং আন্ডারস্কোর সহ)। এগুলিকে ক্যাপিটালাইজ করতে হবে না, তবে প্রায়শই এগুলি এমন হয় যাতে এগুলি ভেরিয়েবল হিসাবে সনাক্ত করা সহজ হয়৷

কিভাবে একটি ভেরিয়েবল সাফ করবেন

আপনি আনসেট দিয়ে একটি ভেরিয়েবল সাফ করতে পারেন কমান্ড:

$ unset FOO
$ echo $FOO

অনুশীলনে, এই ক্রিয়াটি সাধারণত প্রয়োজনীয় নয়। ভেরিয়েবলগুলি তুলনামূলকভাবে "সস্তা" তাই আপনি সেগুলি তৈরি করতে পারেন এবং তারপরে আপনার আর প্রয়োজন না হলে সেগুলি ভুলে যেতে পারেন৷ যাইহোক, এমন সময় হতে পারে যে আপনি ভেরিয়েবলটি পড়তে পারে এমন অন্য প্রক্রিয়ায় ভুল তথ্য প্রেরণ এড়াতে একটি ভেরিয়েবল খালি আছে তা নিশ্চিত করতে চান৷

সংঘাত সুরক্ষা সহ একটি নতুন ভেরিয়েবল তৈরি করুন

কখনও কখনও, আপনার বিশ্বাস করার কারণ থাকতে পারে একটি ভেরিয়েবল ইতিমধ্যেই আপনি বা একটি প্রক্রিয়া দ্বারা সেট করা হয়েছে। আপনি যদি এটিকে ওভাররাইড না করতে চান, তাহলে একটি বিশেষ সিনট্যাক্স আছে যা একটি ভেরিয়েবলকে এর বিদ্যমান মানের সাথে সেট করতে পারে যদি না এটির বিদ্যমান মান খালি থাকে।

এই উদাহরণের জন্য, ধরে নিন যে FOO /home/seth/Documents এ সেট করা আছে :

$ FOO=${FOO:-"bar"}
$ echo $FOO
/home/seth/Documents

কোলন-ড্যাশ :- স্বরলিপি কারণ ঘোষণা একটি বিদ্যমান মান ডিফল্ট করতে. এই প্রক্রিয়াটি অন্যভাবে কাজ করতে দেখতে, ভেরিয়েবলটি সাফ করুন এবং আবার চেষ্টা করুন:

$ unset FOO
$ echo $FOO

$ FOO=${FOO:-"bar"}
$ echo $FOO
bar

একটি শিশু প্রক্রিয়ায় ভেরিয়েবল পাস করুন

আপনি যখন একটি ভেরিয়েবল তৈরি করেন, তখন আপনি তৈরি করছেন যাকে স্থানীয় ভেরিয়েবল বলা হয় . এর মানে হল ভেরিয়েবলটি আপনার বর্তমান শেল এবং শুধুমাত্র আপনার বর্তমান শেলের কাছে পরিচিত।

এই সেটআপটি একটি ভেরিয়েবলের স্কোপের ইচ্ছাকৃত সীমাবদ্ধতা . ভেরিয়েবল, ডিজাইন দ্বারা, ডিফল্ট শুধুমাত্র স্থানীয়ভাবে উপলব্ধ হওয়ার প্রবণতা থাকে, একটি প্রয়োজন-জানার ভিত্তিতে তথ্য ভাগ করে নেওয়ার প্রয়াসে। আপনি যদি নির্বোধভাবে পরিষ্কার পাঠ্যে একটি গুরুত্বপূর্ণ পাসওয়ার্ড সম্বলিত একটি ভেরিয়েবল তৈরি করেন, উদাহরণস্বরূপ, এটি জেনে ভালো লাগছে যে আপনার সিস্টেমটি একটি দূরবর্তী শেল বা দুর্বৃত্ত ডেমন (বা ভেরিয়েবল তৈরি করা একটি সেশনের বাইরে অন্য কিছু) সেই পাসওয়ার্ড অ্যাক্সেস করার অনুমতি দেবে না। .

আপনার প্রম্পট পরিবর্তন করতে এই নিবন্ধের শুরু থেকে উদাহরণ ব্যবহার করুন, কিন্তু তারপর আপনার বর্তমানের মধ্যে একটি নতুন শেল চালু করুন:

$ PS1="% "
% bash
$

আপনি যখন একটি নতুন শেল চালু করেন, তখন PS1 এর নতুন মান৷ আপনার নতুন প্রম্পটের পরিবর্তে ডিফল্ট প্রম্পট:একটি শিশু প্রক্রিয়া তার পিতামাতার মধ্যে সেট করা ভেরিয়েবলের উত্তরাধিকারী হয় না। আপনি যদি শিশু প্রক্রিয়াটিকে মেরে ফেলেন, আপনি পিতামাতার শেলে ফিরে যান এবং আপনি আপনার কাস্টম PS1 দেখতে পাবেন আবার প্রম্পট করুন:

$ exit
%

আপনি যদি চাইল্ড প্রসেসে একটি ভেরিয়েবল পাস করতে চান, তাহলে আপনি প্রিপেন্ড করতে পারেন পরিবর্তনশীল সংজ্ঞা সহ একটি কমান্ড, অথবা আপনি রপ্তানি করতে পারেন চাইল্ড প্রক্রিয়ার পরিবর্তনশীল।

প্রিপেন্ডিং ভেরিয়েবল

একটি কমান্ড চালানোর আগে আপনি যেকোন সংখ্যক ভেরিয়েবল প্রিপেন্ড করতে পারেন। চাইল্ড প্রসেস দ্বারা ভেরিয়েবলগুলি ব্যবহার করা হবে কিনা তা প্রক্রিয়ার উপর নির্ভর করে, তবে আপনি ভেরিয়েবলগুলিকে এটিতে পাস করতে পারেন যাই হোক না কেন:

$ FOO=123 bash
$ echo $FOO
123
$

আপনি যখন নির্দিষ্ট লাইব্রেরির জন্য একটি বিশেষ অবস্থানের প্রয়োজন এমন একটি অ্যাপ্লিকেশন চালাচ্ছেন তখন প্রিপেন্ডিং একটি দরকারী কৌশল হতে পারে (LD_LIBRARY_PATH ব্যবহার করে পরিবর্তনশীল), অথবা যখন আপনি একটি নন-স্ট্যান্ডার্ড কম্পাইলার দিয়ে সফ্টওয়্যার কম্পাইল করছেন (CC ব্যবহার করে পরিবর্তনশীল), এবং তাই।

ভেরিয়েবল রপ্তানি করা

একটি শিশু প্রক্রিয়ায় ভেরিয়েবল উপলব্ধ করার আরেকটি উপায় হল রপ্তানি কীওয়ার্ড, ব্যাশে নির্মিত একটি কমান্ড। রপ্তানি কমান্ড আপনার নির্দিষ্ট করা যাই হোক না কেন ভেরিয়েবল বা ভেরিয়েবলের পরিধিকে বিস্তৃত করে:

$ PS1="% "
$ FOO=123
$ export PS1
$ export FOO
% bash
% echo $PS1
%
% echo $FOO
123

উভয় ক্ষেত্রেই, এটি শুধুমাত্র একটি চাইল্ড শেল নয় যেটির কাছে একটি স্থানীয় ভেরিয়েবলের অ্যাক্সেস রয়েছে যা এটিতে পাস করা হয়েছে বা রপ্তানি করা হয়েছে, এটি সেই শেলের যেকোনো শিশু প্রক্রিয়া। আপনি একই শেল থেকে একটি অ্যাপ্লিকেশন চালু করতে পারেন এবং সেই ভেরিয়েবলটি অ্যাপ্লিকেশানের মধ্যে থেকে একটি পরিবেশ পরিবর্তনশীল হিসাবে উপলব্ধ৷

আপনার সিস্টেমে ব্যবহার করার জন্য সবকিছুর জন্য রপ্তানি করা ভেরিয়েবলকে বলা হয় এনভায়রনমেন্ট ভেরিয়েবল , যা ভবিষ্যতের নিবন্ধের জন্য একটি বিষয়। ইতিমধ্যে, দৈনন্দিন কাজের জন্য কিছু ভেরিয়েবল ব্যবহার করে দেখুন তারা আপনার কর্মপ্রবাহে কী নিয়ে আসে।


  1. লিনাক্সে নেস্টেড ভেরিয়েবল সাবস্টিটিউশন এবং পূর্বনির্ধারিত BASH ভেরিয়েবল - পার্ট 11

  2. বাশে পরিবেশের ভেরিয়েবল কি?

  3. আপনার স্ক্রিপ্টে ব্যাশ ফাঁদ ব্যবহার করা

  4. ব্যাশ ভেরিয়েবল টিউটোরিয়াল – 6 ব্যবহারিক ব্যাশ গ্লোবাল এবং লোকাল ভেরিয়েবল উদাহরণ