পরিবেশ পরিবর্তনশীল বনাম শেল পরিবর্তনশীল, পার্থক্য কী?


56

কেউ আমাকে বলেছেন যে:

BASH পরিবেশের পরিবর্তনশীল নয়, এটি শেল ভেরিয়েবল

পার্থক্য কি?


একই জিনিসটির মতো শোনাচ্ছে কেবল একটি আলাদা সুযোগ আছে?
আলেকজান্ডার মিলস

উত্তর:


35

$BASHএকটি স্থানীয় ভেরিয়েবল যা কেবলমাত্র বর্তমান (ব্যাশ) শেলটিতে বৈধ।

পরিবেশগত পরিবর্তনশীল যেমন $SHELLবৈধ সিস্টেমওয়াইড wide একটি বর্তমান ব্যাশ শেলের মধ্যে $BASHসঞ্চালনের পথে পয়েন্ট ব্যাশ , যেহেতু $SHELLশেল পয়েন্ট ডিফল্ট (যা একই মানের হতে পারে) হিসাবে সংজ্ঞায়িত করা।

পরিবেশের ভেরিয়েবলের ব্যাখ্যার জন্য উবুন্টু সহায়তাতে পরিবেশের পরিবর্তনগুলি দেখুন ।


1
একটি দুর্দান্ত লিঙ্ক (+1) :)
পিটার.ও

12
এই উত্তরটি ভুল / ভুল। পরিবেশের ভেরিয়েবলগুলি বিশ্বব্যাপী / সিস্টেম-ভিত্তিক নয়। শেল ভেরিয়েবল ব্যক্তিগত করার বর্তমানে চলমান শেল, এবং তারা এক্সপোর্ট করা হয় (হস্তান্তর) কোন সন্তান প্রসেস করতে। পরিবেশের ভেরিয়েবলগুলি যে কোনও শিশু প্রক্রিয়াতে রফতানি করা হয়। "MYVAR = বেসরকারী; OURVAR = শেয়ার করুন; প্রিন্টেনভ" কেবল "OURVAR" এর প্রতিবেদন করবে কারণ শেল যখন প্রিন্টেনভ কমান্ডটি কার্যকর করে তখন এটি OVVAR রফতানি করে তবে MYVAR নয়।
সিএম

2
মুখ্যমন্ত্রীর মন্তব্যে +1! আমি পার্থক্যটি এত সহজ এবং নির্ভুলভাবে ব্যাখ্যা কখনও শুনিনি !!! এই মন্তব্যটির উত্তর হওয়া উচিত।
জেসি দ্য উইন্ড ভ্যান্ডেরার

48

একটি পরিবেশের পরিবর্তনশীল একটি প্রোগ্রামে এবং এটি শিশু প্রোগ্রামগুলিতে বিশ্বব্যাপী উপলভ্য। একটি শেল পরিবর্তনশীল কেবল বর্তমান শেলটিতে উপলভ্য। এনভায়রনমেন্ট ভেরিয়েবল হিসাবে শেল ভেরিয়েবলটি উপলভ্য করতে, export VARNAME(ডলার ছাড়াই $) ব্যবহার করুন ।

স্পষ্টকরণের জন্য উদাহরণগুলি:

$ SOME=VAR # define shell variable $SOME
$ echo $SOME
VAR
$ env | grep SOME # note: no output
$ export SOME # turn $SOME into an environment variable
$ env | grep SOME
SOME=VAR

পরিবেশের পরিবর্তনশীল সংজ্ঞায়নের আরেকটি উপায়:

$ export ANOTHER=VALUE
$ echo $ANOTHER
VALUE
$ env | grep ANOTHER
ANOTHER=VALUE

আমি এটি সঠিক মনে করি না। exportঅগত্যা একটি পরিবেশ পরিবর্তনশীল সেট করে না। stackoverflow.com/questions/7411455/...
ক্রিস Stryczynski

3
@ ক্রিসট্রিস্টিজিনস্কি exportশিশু প্রক্রিয়াগুলির জন্য পরিবেশের পরিবর্তনশীল সেট করে। আপনার লিঙ্ক করা পোস্টটি এই উত্তরের সাথে বিরোধী নয়, আপনি কেন এটি ভুল বলে মনে করছেন তা পরিষ্কার করে বলতে পারেন?
লেকেনস্টেইন

exportএকেবারে একটি পরিবেশের পরিবর্তনশীল সেট করুন
ডেভিড টনহোফার

9

পার্থক্য আছে. শেল ভেরিয়েবলস এবং এনভায়রনমেন্ট ভেরিয়েবলগুলি আমি যেভাবে পারি তা এটি আরও ভালভাবে ব্যাখ্যা করবে, তবে এটির একটি অংশ এখানে দেওয়া হয়েছে:

যদি কোনও শেল ভেরিয়েবলে পরিবর্তন আনা হয় তবে পরিবর্তনটি দেখতে কোনও কাঁটাযুক্ত উপ-প্রক্রিয়াগুলির জন্য এটি অবশ্যই যথাযথভাবে পরিবেশগত পরিবর্তনশীলের "রফতানি" করতে হবে। মনে রাখবেন যে শেল ভেরিয়েবলগুলি শেলটিতে সেগুলি সংজ্ঞায়িত করা হয়েছিল are


আমি আমার নিজের মন্তব্যে মন্তব্য করছি .. আমি সত্যই তাকাটের উত্তরের সাহায্যে উবুন্টু লিঙ্কটি পছন্দ করি ... (এটি আমার চেয়ে ভাল)
পিটার.ও

3
প্লাস আপনার লিঙ্ক আর কাজ করে না!

1

শেল পরিবর্তনশীল: স্বল্প মেয়াদী, কেবল শেলের বর্তমান উদাহরণে প্রয়োগ করা হয়, প্রস্থালি সিস্টেম প্রস্থ নয়

পরিবেশগত পরিবর্তনশীল: দীর্ঘমেয়াদী ব্যবহার, বৈধ সিস্টেম ওয়াইড, বিশ্বব্যাপী অনুমোদিত

কনভেনশন অনুসারে শেল ভেরিয়েবলের নাম ছিল লোভেলकेস হিসাবে এবং এনভন। চলকগুলি বড় হাতের অক্ষরে লেখা হয়


-1

এই প্রশ্নের উত্তর দেওয়ার জন্য প্রথমে একটি ভেরিয়েবলের স্কোপ বোঝার চেষ্টা করুন।

যখন আপনি একটি নতুন ভেরিয়েবল তৈরি SOME_ENV_VARIABLE="testing.txt"করেন যেমন এটির মধ্যে রয়েছে SHELL scope, এর অর্থ এটি ব্যবহারকারীর লগইন হওয়া শেলটির উদাহরণ দ্বারা এটি অ্যাক্সেস করা যায় When উদাহরণস্বরূপ যখন পরিবর্তন হয় আপনি একটি নতুন টার্মিনাল খোলেন বা আপনি শেল পরিবর্তন করেন (উদাহরণস্বরূপ আপনি স্যুইচ করুন csh) আপনি যে পরিবর্তনশীল অ্যাক্সেস করতে পারবেন না।

যখন আপনি সেই পরিবর্তনশীলটি রফতান করে যখন চলকটির মতো export SOME_ENV_VARIABLEপরিবেশের সুযোগে এখন উপলব্ধ হয়, এর অর্থ এই যে আপনি যদি শেলটি পরিবর্তন করেন তবে আপনি এখনও সেই পরিবর্তনশীলটি অ্যাক্সেস করতে পারবেন । নীচের উদাহরণ সহ বোঝার চেষ্টা করুন:

[vishrant@localhost]$ SOME_ENV_VARIABLE="testing.txt" #creating variable in bash shell
[vishrant@localhost]$ echo $SOME_ENV_VARIABLE
testing.txt
[vishrant@localhost]$ export SOME_ENV_VARIABLE #variable now available with environment
[vishrant@localhost]$ env | grep SOME_ENV_VARIABLE
SOME_ENV_VARIABLE=testing.txt
[vishrant@localhost]$ csh #changing shell
[vishrant@localhost ~/shell_scripting]$ echo $SOME_ENV_VARIABLE
testing.txt
[vishrant@localhost ~/shell_scripting]$ exit
exit #returned to parent shell
[vishrant@localhost]$ SOME_SHELL_VARIABLE="hello.txt"
[vishrant@localhost]$ csh
[vishrant@localhost ~/shell_scripting]$ echo $SOME_SHELL_VARIABLE
SOME_SHELL_VARIABLE: Undefined variable.

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

মনে রাখবেন কোনও নতুন টার্মিনাল খুললে আপনি যে কোনও ভেরিয়েবল অ্যাক্সেস করতে পারবেন না কারণ আপনি সেই উদাহরণটি পরিবর্তন করছেন । তার জন্য আপনার .profileবা আপনার ভেরিয়েবলগুলি যুক্ত করতে হবে বা .bashrc(আপনি যদি ব্যাশ ব্যবহার করছেন)।

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