উত্তর:
$?
সর্বাধিক সম্পাদিত সম্পাদিত অগ্রভাগের পাইপলাইনটির প্রস্থান স্থিতিতে প্রসারিত হয়। বাশ ম্যানুয়ালটির বিশেষ পরামিতি বিভাগটি দেখুন ।
সহজ কথায়, এটি শেষ কমান্ডের প্রস্থান স্থিতি।
সিজেএমের উত্তরটি সঠিক, তবে $?
শেল স্ক্রিপ্টগুলিতে নির্বোধ উপায়ে ব্যবহার করা যেতে পারে এবং আমি এর বিরুদ্ধে সতর্ক করতে চাই। প্রচুর খারাপ শেল স্ক্রিপ্টগুলির কোডের পুনরাবৃত্তি প্যাটার্ন রয়েছে:
run_some_command
EXIT_STATUS=$?
if [ "$EXIT_STATUS" -eq "0" ]
then
# Do work when command exists on success
else
# Do work for when command has a failure exit
fi
যদি সম্ভব হয় (পঠনযোগ্যতার উদ্বেগ কখনও কখনও অনুপ্রবেশ করে) আপনার এই পরিস্থিতিটি আলাদাভাবে কোড করা উচিত:
if run_some_command
then
# Do work when command exists on success
else
# Do failure exit work
fi
এই পরবর্তী ব্যবহারটি দ্রুততর, শেমের পরিবর্তনশীল নেমস্পেসকে টেম্প ভেরিয়েবলগুলির পরিমাণের সাথে দূষিত করে না, এটি মানুষের জন্য প্রায়শই অনেক বেশি পঠনযোগ্য হতে পারে এবং "ইতিবাচক যুক্তি" ব্যবহারকে উত্সাহিত করে, অবহেলা ছাড়াই শর্তসাপেক্ষ লেখার অনুশীলন, যা জ্ঞানীয় বেশিরভাগ পরিস্থিতিতে সরলতা। এটি $?
বেশিরভাগ অংশের ব্যবহার বন্ধ করে দেয় ।
সিজেএম যা বলেছিল তা ছাড়াও , এর মান $?
যদি 0 হয়, তবে পূর্ববর্তী প্রক্রিয়াটি সাধারণত (বা সফলভাবে) শেষ হয়ে যায়। অন্যথায় কিছু ত্রুটি ছিল।
diff
তুলনা করা ফাইলগুলি একই রকম হলে 0 দিয়ে বের হয় এবং 1 টি ভিন্ন হয় এবং 2 টি ত্রুটি।
$?
- শেষ আদেশের নির্বাহ স্থিতি কার্যকর করা হয়।
$0
- বর্তমান স্ক্রিপ্ট ফাইল নাম।
$#
- কোনও স্ক্রিপ্টে সরবরাহ করা যুক্তিগুলির সংখ্যা।
$$
- বর্তমান শেলটির প্রক্রিয়া সংখ্যা। শেল স্ক্রিপ্টগুলির জন্য, এটি সেই প্রক্রিয়া আইডি যার অধীনে তারা চালাচ্ছে।
$? আমাদের প্রম্পটে সর্বশেষ নির্বাহী কমান্ডের সম্পাদনের স্থিতি সরবরাহ করে। মান '0' বোঝায় যে কমান্ডটি সফলভাবে কার্যকর হয়েছিল এবং '1' সাফল্যের জন্য নয়।
$?
সম্পাদিত কমান্ডের প্রস্থান স্থিতি নির্ধারণ করে। $
সংখ্যার পরে (যেমন $1
, $2
ইত্যাদি) শেল স্ক্রিপ্টের পরামিতিগুলি উপস্থাপন করে।