যখন আপনি ব্যবহার LANG=C gcc ...
সেখানে কি ঘটছে যে শেল জন্য সেট করে LANG- তে হয় gcc
এর পরিবেশ শুধুমাত্র , এবং না জন্য বর্তমান পরিবেশ নিজেই ( নোট দেখুন )। সুতরাং gcc
শেষ হওয়ার পরে , LANG
তার আগের মানটিতে ফিরে আসে (বা আনসেট না করা)।
তদ্ব্যতীত, আপনি যখন A=10 echo $A
এটি ব্যবহার করেন তখন শেল যা প্রতিধ্বনি নয়, $ A প্রতিস্থাপন করে, এবং এই বিকল্পটি ("এক্সপেনশন" নামে পরিচিত) বিবৃতিটি মূল্যায়ন করার আগে ঘটে (অ্যাসাইনমেন্ট সহ), সুতরাং প্রত্যাশার A
মান হিসাবে ইতিমধ্যে সেট করা থাকতে হবে মধ্যে বর্তমান যে বিবৃতি পূর্বে পরিবেশ।
এ কারণেই A=10 echo $A
প্রত্যাশার মতো কাজ করে না: A=10
প্রতিধ্বনির জন্য সেট করা হবে তবে পরিবেশগত ভেরিয়েবলের মান ইকো অভ্যন্তরীণভাবে উপেক্ষা করবে A
। এবং বর্তমান শেলটিতে$A
মান সেট (যা কোনটি নয়) দ্বারা প্রতিস্থাপিত হয় এবং এর পরে প্রতিধ্বনি হিসাবে যুক্ত হয়ে যায়।
সুতরাং আপনার অনুমানটি সঠিক: কাজ VAR=value command
করে তবে এটি কেবলমাত্র প্রাসঙ্গিকভাবে যদি command
অভ্যন্তরীণভাবে VAR ব্যবহার করে । যদি তা না হয়, আপনি কি এখনও পাস করতে পারেন value
একটি যেমন যুক্তি করার command
, কিন্তু যুক্তির দ্বারা প্রতিস্থাপিত হয় বর্তমান , শেল তাই তারা ব্যবহার করার পূর্বে নির্ধারণ করা আবশ্যক:VAR=value; command "$VAR"
যদি আপনি কীভাবে এক্সিকিউটেবল স্ক্রিপ্ট তৈরি করতে জানেন তবে আপনি এটি পরীক্ষা হিসাবে চেষ্টা করতে পারেন:
#!/bin/sh
echo "1st argument is $1"
echo "A is $A"
এটি হিসাবে সংরক্ষণ করুন testscript
এবং চেষ্টা করুন:
$ A=5; A=10 testscript "$A"; echo "$A"
1st argument is 5
A is 10
5
সর্বশেষে তবে সর্বনিম্ন নয়, শেল এবং পরিবেশের ভেরিয়েবল এবং প্রোগ্রাম আর্গুমেন্টের মধ্যে পার্থক্যটি জানা ভাল ।
এখানে কিছু ভাল উল্লেখ রয়েছে:
।
(*) নোট: টেকনিক্যালি শেল নেই খুব বর্তমান পরিবেশে সেট, এবং এখানে কেন: কিছু কমান্ড, মত echo
, read
এবং test
হয় শেল builtins , এবং যেমন তারা একটি শিশু প্রক্রিয়া ডিম না। তারা বর্তমান পরিবেশে চালানো। কমান্ডটি চালা না হওয়া পর্যন্ত শেলটি কেবলমাত্র অ্যাসাইনমেন্টের যত্ন নেয় so সুতরাং সমস্ত ব্যবহারিক কাজের জন্য প্রভাব একই হয়: অ্যাসাইনমেন্টটি কেবলমাত্র একক কমান্ড দ্বারা দেখা যায়।
A=10 (echo $A)
এবং পেতে10
পারি?