রফতানি করা শেল ভেরিয়েবল এবং ব্যাশে নেই এমনগুলির মধ্যে পার্থক্য


41

বাশ রফতানি করা ভেরিয়েবলগুলির মধ্যে পার্থক্য বলে মনে হচ্ছে এবং যা নেই।

উদাহরণ:

$ FOO=BAR
$ env | grep FOO
$ set | grep FOO
FOO=BAR

setভেরিয়েবল দেখেন কিন্তু envকরেন না।

$ export BAR=FOO
$ env | grep FOO
BAR=FOO
$ set | grep FOO
BAR=FOO
FOO=BAR

setউভয় ভেরিয়েবল envদেখতে পায় তবে কেবল রফতানি চলকটি দেখতে পায়।

আমি জানি এটি setএকটি বাশ অন্তর্নির্মিত এবং envনা।

রফতানি করা ভেরিয়েবলের মধ্যে পার্থক্য কী এবং যা নেই?


17
পরিভাষা নোট: একটি "পরিবেশের পরিবর্তনশীল" সর্বদা রফতানি হয়। একটি অ-রফতানি ভেরিয়েবল হ'ল "শেল ভেরিয়েবল" (বা "প্যারামিটার")।
গিলস 'তাই খারাপ হওয়া বন্ধ করুন'

উত্তর:


44

রফতানি ভেরিয়েবলগুলি শেল দ্বারা চালিত কমান্ডের পরিবেশে তাদের রফতানি করা হয়, যখন অ-রফতানি ভেরিয়েবলগুলি বর্তমান শেল আবেদনের স্থানীয় হয়। থেকে exportমানুষ পৃষ্ঠা:

শেলটি নির্দিষ্ট নামগুলির সাথে সম্পর্কিত ভেরিয়েবলগুলিতে রফতানীর বৈশিষ্ট্য দেবে, যার ফলে পরবর্তীকালে সম্পাদিত কমান্ডগুলির পরিবেশে তাদের উপস্থিতি ঘটবে।

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

$ FOO=BAR
$ bash
$$ echo $FOO             # Note the empty line

$$ exit
$ export FOO
$ bash
$$ echo $FOO
BAR
$$

নোট করুন যে এটি পরিবর্তনশীল যা রফতানি হয়, কেবল তার মান নয়। এর অর্থ আপনি একবার export FOO, FOO, একটি বিশ্বব্যাপী পরিবর্তনশীল এবং শো পরবর্তী পরিবেশের মধ্যে আপ হয়ে এমনকি যদি পরে পরিবর্তিত হয়েছে:

$ export FOO
$ FOO=BAR
$ bash
$$ echo $FOO
BAR
$$

সুতরাং আপনি যদি কেবল বর্তমান শেল সম্পর্কে উদ্বিগ্ন হন তবে আপনার কি রফতানি করতে হবে? পৃথকভাবে, কেন localeবর্তমান শেলটির জন্য আপডেটগুলি প্রদর্শিত হবে না?
পেসারিয়ার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.