$ का अर्थ क्या है? एक शेल स्क्रिप्ट में?


जवाबों:


43

$?सबसे हाल ही में निष्पादित अग्रभूमि पाइपलाइन की निकास स्थिति के लिए फैलता है। बैश मैनुअल के विशेष पैरामीटर अनुभाग देखें ।

सरल शब्दों में, यह अंतिम कमांड की निकास स्थिति है।


26

Cjm का उत्तर सही है, लेकिन $?इसे शेल स्क्रिप्ट में मूर्खतापूर्ण तरीकों से इस्तेमाल किया जा सकता है, और मैं इसके खिलाफ चेतावनी देना चाहूंगा। बहुत सी खराब शेल स्क्रिप्ट में कोड का एक दोहराया पैटर्न होता है:

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 से अधिक संभावनाएं हों - प्रोग्राम अक्सर निकास कोड के माध्यम से उपयोगी जानकारी संवाद करते हैं। और यह भी उपयोगी है यदि आपको कोड में बाद में उस मूल्य का उपयोग करने की आवश्यकता है (उदाहरण के लिए, लॉगिंग के लिए)।
परिपक्वता

3

Cjm ने जो कहा उसके अलावा , यदि मान $?0 है, तो पिछली प्रक्रिया ने सामान्य रूप से (या सफलतापूर्वक) समाप्त कर दिया। अन्यथा कुछ त्रुटि थी।


8
यह हमेशा किसी त्रुटि का संकेत नहीं देता है। diff0 के साथ बाहर निकलता है यदि तुलना की गई फाइलें समान हैं, तो 1 के साथ यदि वे अलग हैं, और 2 एक त्रुटि है।
शॉन जे। गोफ

2
यह कभी भी त्रुटि का संकेत नहीं देता है। यह केवल पिछली कमांड की निकास स्थिति है। "0 यदि सामान्य निकास" चीज एक सम्मेलन (EXIT_SUCCESS / EXIT_FAILURE) है
aviraldg

3

$?निष्पादित अंतिम आदेश की निकास स्थिति।

$0-वर्तमान पटकथा का नाम।

$#-एक स्क्रिप्ट को दिए गए तर्कों की संख्या।

$$-वर्तमान शेल की प्रक्रिया संख्या। शेल स्क्रिप्ट के लिए, यह प्रक्रिया आईडी है जिसके तहत वे निष्पादित कर रहे हैं।


0

$? हमें शीघ्र पर अंतिम निष्पादन आदेश की निष्पादन स्थिति प्रदान करें। मान '0' बताता है कि कमांड को सफल बनाया गया था और '1' सफलता के लिए नहीं है।


2
न केवल संवादात्मक संकेतों पर, बल्कि लिपियों में भी, और कोई भी गैर-शून्य मान विफलता का संकेत देता है।
Kusalananda

-3

$?निष्पादित कमांड की निकास स्थिति निर्धारित करता है। $संख्या के बाद (जैसे $1, $2आदि) शेल स्क्रिप्ट में मापदंडों का प्रतिनिधित्व करता है।


आप सही उत्तर पढ़ना चाहते हैं ...
jasonwryan
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.