শেল ভেরিয়েবল বনাম পরিবেশের ভেরিয়েবল
MY_HOME="/home/my_user"সেট করে শেল পরিবর্তনশীল নামক MY_HOME। শেলগুলি প্রোগ্রামিং ল্যাঙ্গুয়েজ এবং ভেরিয়েবল রয়েছে (একে প্যারামিটারও বলা হয়)। এই নিয়োগের পরে, আপনি ভেরিয়েবলের মান ব্যবহার করতে পারেন, যেমন echo "$MY_HOME"।
শেল ভেরিয়েবলগুলি একটি অভ্যন্তরীণ শেল ধারণা। যখন শেল ইনস্ট্যান্সটি সমাপ্ত হয়, তখন MY_HOMEভুলে যায়। প্রতিটি প্রোগ্রাম যা জানে এবং তার বাচ্চাদের কাছে সংক্রমণ করে তা হ'ল পরিবেশের পরিবর্তনশীল ।
শেলের ভিতরে, পরিবেশের ভেরিয়েবল এবং শেল ভেরিয়েবলগুলি খুব অনুরূপ উপায়ে কাজ করে। আসলে কী হয় শেলটি তার পিতামাতার কাছ থেকে প্রাপ্ত সমস্ত পরিবেশের ভেরিয়েবলগুলি শেল ভেরিয়েবল হয়। বিপরীতে, শেল স্ক্রিপ্টে সংজ্ঞায়িত শেল পরিবর্তনশীল আপনি যদি এটি রফতানি করেন তবে পরিবেশের পরিবর্তনশীল হয়ে উঠবে ।
export MY_HOME="/home/my_user"
আরও বিশদ আপনি প্রথম পড়াতে এড়াতে পারেন
শেল ভেরিয়েবলগুলি স্বয়ংক্রিয়ভাবে পরিবেশের ভেরিয়েবলগুলি না পরিণত হওয়ার কারণটি হ'ল একটি স্ক্রিপ্ট ঘটনাক্রমে এমন কোনও চলক নামটি ব্যবহার করতে পারে যা এটি চালু করা একটি প্রোগ্রামের অর্থপূর্ণ এবং আংশিকভাবে কেবল historicalতিহাসিক।
exportপ্রতিবার যখন আপনি একটি ভেরিয়েবলের নাম পরিবর্তন করেন তখন কয়েকটি খুব পুরানো শেল ব্যবহার করা প্রয়োজন , তবে সমস্ত আধুনিক শেলগুলি পরিবেশের ভেরিয়েবলের জন্য অ্যাসাইনমেন্টগুলি ট্র্যাক করে রাখে, যাতে নিম্নলিখিত স্নিপেট প্রতিধ্বনিত হয় bar:
myvar=foo
export myvar
myvar=bar
env | grep '^myvar='
এছাড়াও, বেশ কয়েকটি পুরানো শেলের জন্য আলাদা কমান্ডের প্রয়োজন হয় myvar=fooএবং export myvarসমস্ত আধুনিক শেল বুঝতে পারে export myvar=foo।
আপনি set -aসমস্ত শেল ভেরিয়েবল অ্যাসাইনমেন্ট তৈরি করতে দৌড়াতে পারবেন স্বয়ংক্রিয়ভাবে চলকটি রফতানি করতে, যাতে myvar=fooআপনি export myvar=fooযদি set -aপ্রথম শেলটিতে ছুটে যান তবে এটি সমান ।
উদ্ধৃতি দেওয়ার সময়
উদ্ধৃতিটি বেশিরভাগ অর্থেগোনাল। আপনি ভেরিয়েবলের জন্য যে মানটি নির্ধারণ করছেন তাতে যদি শেলের জন্য বিশেষ কোনও অক্ষর না থাকে তবে আপনার কোনও উদ্ধৃতি প্রয়োজন হবে না। যদি বিশেষ চরিত্রগুলি থাকে তবে আপনার এগুলিকে একক উদ্ধৃতি বা ডাবল কোট বা ব্যাকস্ল্যাশ বা এর সংমিশ্রণ দিয়ে রক্ষা করতে হবে। এটি প্লেইন myvar=valueসিনট্যাক্স এবং exportইউটিলিটি উভয়ের জন্য যায় ।
অ্যাসাইনমেন্ট সিনট্যাক্স এবং সিনট্যাক্সের মধ্যে একটি পার্থক্য রয়েছে export। শেলটি পরিবর্তনশীল বিকল্পগুলির ফলাফলকে $fooআরও প্রসারিত করে ক্ষেত্র (শব্দ) বিভাজন এবং পথের নাম প্রসারিত (গ্লোবিং) সম্পাদন করে । এর অর্থ এই যে যদি এর মান myvarহয় hello *, তারপর echo $myvarছাপে helloএকটি একক স্থান দ্বারা অনুসরণ বর্তমান ডিরেক্টরির সকল ফাইলের তালিকা অনুসরণ। এই প্রায় না কাঙ্ক্ষিত, অত: পর সাধারণ নীতি সবসময় পরিবর্তনশীল বদল প্রায় ডবল কোট ব্যবহার (যদি না আপনি কি জানেন যে আপনি সম্প্রসারণ বা ক্ষেত্র বিভাজন পথনাম প্রয়োজন): echo "$myvar"। একটি সহজ নিয়োগ ক্ষেত্রে সালে othervar=$myvarআসলে নির্ভরযোগ্যভাবে কপি মান myvarথেকেothervar, কারণ গ্লোব্বিং এবং শব্দের বিভাজন কার্যনির্বাহনে বাধা রয়েছে (কারণ তারা একাধিক শব্দ তৈরি করে তবে একটি শব্দই প্রত্যাশিত)। তবে এই সরবরাহটি প্রযোজ্য নয় export। সুতরাং আপনি যদি একটি সাধারণ নিয়ম মনে রাখতে চান তবে কেবল সর্বদা পরিবর্তনশীল বিকল্পের দ্বিগুণ ডাবল উদ্ধৃতি ব্যবহার করুন।