কমন্ড লাইনের স্ক্রিন থেকে নিম্নলিখিতগুলি সম্পাদন করা হচ্ছে:
bash -c "v=value; echo $v"
কিছুই প্রদর্শন করে। ঠিক আছে? আমি এই ধরণের মৃত্যুদণ্ডের মধ্যে কোনও ভেরিয়েবলের মান নির্ধারণ করতে পারি?
কমন্ড লাইনের স্ক্রিন থেকে নিম্নলিখিতগুলি সম্পাদন করা হচ্ছে:
bash -c "v=value; echo $v"
কিছুই প্রদর্শন করে। ঠিক আছে? আমি এই ধরণের মৃত্যুদণ্ডের মধ্যে কোনও ভেরিয়েবলের মান নির্ধারণ করতে পারি?
উত্তর:
এখানে দুটি শাঁস জড়িত রয়েছে:
কলিং শেল, ইন্টারেক্টিভ শেল যা থেকে আপনি এটি চালাচ্ছেন
অ-লগইন, অ-ইন্টারেক্টিভ শেল, দ্বারা তৈরি bash -c
এখন, সমস্যাটি হ'ল ডাবল কোটের মধ্যে ভেরিয়েবলগুলি তাদের নিজ নিজ মানগুলিতে প্রসারিত করা হয়, এটি কোনও শেলের ক্ষেত্রে সত্য।
সুতরাং, আপনি যেমন ডাবল উদ্ধৃতি ব্যবহার করেছেন, পরিবর্তনশীল প্রসারণটি $vপ্রকৃতপক্ষে কলিং শেলটিতে ঘটছে, কল শেল নয়। তবে ঘোষণাটি, v=valueঅ-ইন্টারেক্টিভ শেল নামে পরিচিত on
সুতরাং, মোট, আপনি কল শেল মধ্যে পরিবর্তনশীল সংজ্ঞায়িত এবং প্রসারিত (পূর্বে) আছে। কলিং শেলটিতে মান ভেরিয়েবলটি আনসেট না হওয়ায় আউটপুটে আপনি কিছুই পাচ্ছেন না।
এখন, আবর্তিত শেলটিতে পরিবর্তনশীল সংজ্ঞা এবং সম্প্রসারণ করতে, একক উদ্ধৃতি ব্যবহার করুন বা পালাতে হবে $:
$ bash -c "v=value; echo $v"
$ bash -c 'v=value; echo $v'
value
$ bash -c "v=value; echo \$v"
value
ডাবল উদ্ধৃতি সহ $vইন্টারেক্টিভ শেল দ্বারা প্রতিস্থাপিত হয়। একক উদ্ধৃতি ব্যবহার করুন:
$ bash -c 'v=value;echo $v'
value