"$?" (डॉलर-प्रश्न चिह्न) चर केवल बैश शेल में उपलब्ध है?


10

में Bashखोल, मैं के माध्यम से आदेश से बाहर निकलें स्थिति प्राप्त कर सकते हैं $?चर:

# ps -ef | grep "haha"
root     15439 15345  0 23:02 pts/0    00:00:00 grep --color=auto haha
# echo $?
0

क्या यह केवल बैश शेल में उपलब्ध है? या मैं इसे अन्य गोले में भी इस्तेमाल कर सकता हूं?


8
आप इसे किसी भी POSIX शेल में उपयोग कर सकते हैं, यह विशेष मापदंडों में से
cuonglm

जवाबों:


19

$?निकास कोड किसी भी खोल कि POSIX इस प्रकार के लिए आम है, और में वर्णन किया गया 2.5.2 विशेष पैरामीटर :

?
सबसे हालिया पाइपलाइन (देखें पाइपलाइन ) के दशमलव निकास की स्थिति का विस्तार करता है ।


5
पोसिक्स शेल ही नहीं, बॉर्न शेल सहित सभी बॉर्न-जैसे गोले (जो मेरा मानना ​​है कि यह एक था जो इसे पेश कर रहा था, माशै शेल के पास ऐसा था जैसा $rमैं मानता हूं)। इसलिए यह 70 के दशक के उत्तरार्ध में यूनिक्स V7 के बाद से लगभग सभी यूनिक्स जैसी प्रणालियों का हिस्सा है, अधिकांश अन्य गोले (csh, tsh, मछली, आरसी) के रूप में है $status
स्टीफन चेजालस

2
और कई स्क्रिप्टिंग भाषाएं: पर्ल, रूबी, आदि
ऑरेंजडॉग

13

जैसा कि थॉमस डिकी ने कहा, किसी भी पोसिक्स शेल (यानी उनमें से बहुत अधिक) होगा $?

इस सवाल ने मुझे बहुत रूचि दी, इसलिए मैंने इसे अपने हाथों से प्राप्त होने वाले किसी भी शेल पर परीक्षण किया:

  • mksh
  • zsh
  • /bin/sh मेरे सैमसंग गैलेक्सी S5 पर
  • /bin/sh मेरे राउटर पर
  • tcsh
  • ksh
  • dash
  • /bin/sh 1989 से मेरे वर्चुअल यूनिक्स सिस्टम V पर
  • cmd.exeऔर powershell.exeमेरे विंडोज 10 कंप्यूटर पर

और $?इन लेकिन के सभी में काम किया है fishऔर cmd.exe

मिली दो दिलचस्प बातें:

1. $?विंडोज पॉवरशेल में काम करता है!

खैर, एक बिंदु पर। 0 या अधिक संख्या में लौटने के बजाय, यह सिर्फ Trueऔर है False

PS C:\WINDOWS\system32> echo $?
True
PS C:\WINDOWS\system32> gfdhgfhfdgfdg
gfdhgfhfdgfdg : The term 'gfdhgfhfdgfdg' is not recognized as the name of a cmdlet, ...(big long error output).....
PS C:\WINDOWS\system32> echo $?
False

2. $?शेल में काम नहीं करता है fish

हालाँकि, जब आप $?मछली टाइप करते हैं, तो आपको यह संदेश मिलता है:

~$ echo $?
$? is not the exit status. In fish, please use $status.
fish: echo $?

मैंने इसका ज्यादा इस्तेमाल नहीं किया है, लेकिन मैं हैरान नहीं हूं, fishलगता है कि इसकी अपनी दिलचस्प खोल भाषा है, bashजो पूरी तरह से अलग है या जो भी हो।


अधिकांश गोले (मछली, csh, tsh, rc, zsh) का उपयोग $statusकिया जाता है जो कि बहुत अधिक सीधा / सुदूर IMO है। केवल बॉर्न-जैसे गोले (यूनिक्स गोले के बीच) $?AFAIK का उपयोग करते हैं ।
स्टीफन चेज़लस

3
बस इस बात पर निर्भर करता है कि आप कैसे पढ़ रहे हैं। मैं मानसिक $?रूप से "श ## हुआ?" और उसके बाद, मैं इस विशेष चर का अर्थ कभी नहीं भूल पाया :)

2
@nwildner लोल! मुझे लगता है कि अब मैं कभी नहीं भूलूंगा!
१३:१६
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.