নীচের উদাহরণগুলি এবং পসিক্স শেলগুলিতে তাদের ফলাফলগুলি দেখুন:
false;echo $?বাfalse || echo 1:1false;foo="bar";echo $?বাfoo="bar" && echo 0:0foo=$(false);echo $?বাfoo=$(false) || echo 1:1foo=$(true);echo $?বাfoo=$(true) && echo 0:0
Https://stackoverflow.com/questions/6834487/ কি-is-the-variable-in- Shell-scriptting- এ সর্বাধিক ভোট দেওয়া উত্তর দ্বারা উল্লিখিত হয়েছে :
$?শেষ সম্পাদিত কমান্ডের রিটার্ন মান সন্ধান করতে ব্যবহৃত হয়।
এটি সম্ভবত এই ক্ষেত্রে কিছুটা বিভ্রান্তিকর, সুতরাং আসুন পসিক্স সংজ্ঞাটি পাই যা সেই থ্রেডের একটি পোস্টে উদ্ধৃতও করা হয়েছে:
? সর্বাধিক সাম্প্রতিক পাইপলাইন দশমিক প্রস্থান স্থিতি প্রসারিত (পাইপলাইন দেখুন)।
সুতরাং এটি প্রদর্শিত হবে যেন একটি অ্যাসাইনমেন্ট নিজেই একটি শূন্য প্রস্থান মান সহ একটি কমান্ড (বা বরং একটি পাইপলাইন অংশ) হিসাবে গণনা করে তবে এটি অ্যাসাইনমেন্টের ডান দিকের আগে প্রযোজ্য (যেমন কমান্ড প্রতিস্থাপনটি এখানে আমার উদাহরণগুলিতে কল করে)।
আমি দেখতে পাচ্ছি যে এই আচরণটি ব্যবহারিক দিক থেকে কীভাবে বোঝায় তবে এটি আমার কাছে কিছুটা অস্বাভাবিক বলে মনে হয় যে অ্যাসাইনমেন্টটি নিজেই সেই ক্রমে গণনা করবে। এটি আমার কাছে কেন বিস্ময়কর হয়েছে তা আরও স্পষ্ট করার জন্য, ধরে নেওয়া যাক অ্যাসাইনমেন্টটি কোনও ফাংশন ছিল:
ASSIGNMENT( VARIABLE, VALUE )
তাহলে foo="bar"হবে
ASSIGNMENT( "foo", "bar" )
এবং foo=$(false)কিছু হবে
ASSIGNMENT( "foo", EXECUTE( "false" ) )
যা অর্থ দাঁড়ায় এই যে EXECUTEরান প্রথম এবং শুধুমাত্র পরে ASSIGNMENT চালানো হয় কিন্তু এটি এখনও এর EXECUTEঅবস্থা যে এখানে গুরুত্বপূর্ণ।
আমি কি আমার মূল্যায়নে সংশোধন করছি বা আমি কিছু ভুল বুঝে / মিস করছি? আমার জন্য এই আচরণকে "অদ্ভুত" হিসাবে দেখার সঠিক কারণগুলি কি?
false;foo="bar";echo $?শেষ আসল কমান্ডটি যখন দৌড়েছিল তখন সর্বদা কেন 0 ফিরে আসে না false?" কোডগুলি প্রস্থান করার ক্ষেত্রে এটি অ্যাসাইনমেন্টগুলি বিশেষ আচরণ করে। তাদের প্রস্থান কোডটি সর্বদা 0 থাকে তবে যখনই এটি এমন কোনও কিছু নয় যা অ্যাসাইনমেন্টের ডান হাতের অংশ হিসাবে চলেছিল।