$ এর অর্থ কী? শেল স্ক্রিপ্টে?


উত্তর:


43

$?সর্বাধিক সম্পাদিত সম্পাদিত অগ্রভাগের পাইপলাইনটির প্রস্থান স্থিতিতে প্রসারিত হয়। বাশ ম্যানুয়ালটির বিশেষ পরামিতি বিভাগটি দেখুন ।

সহজ কথায়, এটি শেষ কমান্ডের প্রস্থান স্থিতি।


26

সিজেএমের উত্তরটি সঠিক, তবে $?শেল স্ক্রিপ্টগুলিতে নির্বোধ উপায়ে ব্যবহার করা যেতে পারে এবং আমি এর বিরুদ্ধে সতর্ক করতে চাই। প্রচুর খারাপ শেল স্ক্রিপ্টগুলির কোডের পুনরাবৃত্তি প্যাটার্ন রয়েছে:

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

এই পরবর্তী ব্যবহারটি দ্রুততর, শেমের পরিবর্তনশীল নেমস্পেসকে টেম্প ভেরিয়েবলগুলির পরিমাণের সাথে দূষিত করে না, এটি মানুষের জন্য প্রায়শই অনেক বেশি পঠনযোগ্য হতে পারে এবং "ইতিবাচক যুক্তি" ব্যবহারকে উত্সাহিত করে, অবহেলা ছাড়াই শর্তসাপেক্ষ লেখার অনুশীলন, যা জ্ঞানীয় বেশিরভাগ পরিস্থিতিতে সরলতা। এটি $?বেশিরভাগ অংশের ব্যবহার বন্ধ করে দেয় ।


5
যখন কেবল 0 বা 1 এর চেয়ে বেশি সম্ভাবনা থাকে তখন আরও জটিল বাক্য গঠন প্রয়োজন - প্রোগ্রামগুলি প্রায়শই প্রস্থান কোডগুলির মাধ্যমে দরকারী তথ্য যোগাযোগ করে। কোডে (লগিংয়ের জন্য, উদাহরণস্বরূপ) পরে যদি আপনাকে সেই মানটি আবার ব্যবহার করতে হয় তবে এটি দরকারী।
mattdm

3

সিজেএম যা বলেছিল তা ছাড়াও , এর মান $?যদি 0 হয়, তবে পূর্ববর্তী প্রক্রিয়াটি সাধারণত (বা সফলভাবে) শেষ হয়ে যায়। অন্যথায় কিছু ত্রুটি ছিল।


8
এটি সর্বদা একটি ত্রুটি সংকেত দেয় না। diffতুলনা করা ফাইলগুলি একই রকম হলে 0 দিয়ে বের হয় এবং 1 টি ভিন্ন হয় এবং 2 টি ত্রুটি।
শন জে গফ

2
এটি কখনই ত্রুটির সংকেত দেয় না । এটি পূর্ববর্তী কমান্ডের কেবলমাত্র প্রস্থান স্থিতি। "0 এ যদি স্বাভাবিক প্রস্থান" জিনিসটি একটি কনভেনশন হয় (EXIT_SUCCESS / EXIT_FAILURE)
aviraldg

3

$?- শেষ আদেশের নির্বাহ স্থিতি কার্যকর করা হয়।

$0- বর্তমান স্ক্রিপ্ট ফাইল নাম।

$#- কোনও স্ক্রিপ্টে সরবরাহ করা যুক্তিগুলির সংখ্যা।

$$- বর্তমান শেলটির প্রক্রিয়া সংখ্যা। শেল স্ক্রিপ্টগুলির জন্য, এটি সেই প্রক্রিয়া আইডি যার অধীনে তারা চালাচ্ছে।


0

$? আমাদের প্রম্পটে সর্বশেষ নির্বাহী কমান্ডের সম্পাদনের স্থিতি সরবরাহ করে। মান '0' বোঝায় যে কমান্ডটি সফলভাবে কার্যকর হয়েছিল এবং '1' সাফল্যের জন্য নয়।


2
কেবল ইন্টারেক্টিভ প্রম্পটেই নয়, স্ক্রিপ্টগুলিতেও এবং কোনও শূন্য-মান মান ব্যর্থতা নির্দেশ করে।
কুসালানন্দ

-3

$?সম্পাদিত কমান্ডের প্রস্থান স্থিতি নির্ধারণ করে। $সংখ্যার পরে (যেমন $1, $2ইত্যাদি) শেল স্ক্রিপ্টের পরামিতিগুলি উপস্থাপন করে।


আপনি সঠিক উত্তরটি পড়তে চাইতে পারেন ...
জেসনওয়ারিয়ান
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.