যখন আপনি ব্যবহার 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পারি?