यूनिक्स में टेस्ट कमांड आउटपुट प्रिंट नहीं करता है


20

जब मैं इसे टर्मिनल में टाइप करता हूं

test 4 -lt 6

मुझे कोई आउटपुट नहीं मिला क्यों नहीं? मुझे वह 0 या 1 चाहिए


1
क्या यह अच्छा नहीं होगा अगर 'परीक्षण' में तुरंत एक मूल्य का उत्पादन करने का विकल्प था? बस विकल्प है। हम सब की आवश्यकता होगी।
टोड वाल्टन

जवाबों:


15

आपको 0 या 1. मिलता है।

bash-4.2$ test 4 -lt 6

bash-4.2$ echo $?
0

bash-4.2$ test 4 -gt 6

bash-4.2$ echo $?
1

अपडेट : बाद में उपयोग के लिए एक्जॉस्टकोड स्टोर करने के लिए, बस इसे एक वैरिएबल पर असाइन करें:

bash-4.2$ test 4 -lt 6

bash-4.2$ first=$?

bash-4.2$ test 4 -gt 6

bash-4.2$ second=$?

bash-4.2$ echo "first test gave $first and the second $second"
first test gave 0 and the second 1

1
क्या एक्ज़िट कोड को पाइप करने का कोई तरीका है?
इंडीमैन

3
नहीं। केवल आउटपुट को पुनर्निर्देशित किया जा सकता है। वैसे भी, आमतौर पर इसके लिए कोई ज़रूरत नहीं है। इसे बाद के उपयोग के लिए संग्रहीत करने के लिए, इसे केवल एक चर में असाइन करें। या हमें बताएं कि उस मूल्य के साथ आपका इरादा क्या है।
मैनटवर्क

2
निकास कोड को $?चर में रखा गया है - कम से कम जब तक यह आपके द्वारा निष्पादित अगले कमांड द्वारा अधिलेखित नहीं हो जाता है।
शादुर

1
पुनश्च: आप उपयोग कर सकते हैं सरणी एक पाइप लाइन में कई आदेशों में से परिणाम प्राप्त करने के। द्वारा का परिणाम हो सकता है पिछले पाइप लाइन में आदेश यदि विकल्प बंद (डिफ़ॉल्ट) है। $PIPESTATUS$?pipefail
l0b0

@indieman, अगर आपको जरूरत है तो बाहर निकलने की स्थिति के आधार पर कुछ और करने की, आपको इसे बचाने की भी जरूरत नहीं है - बस उपयोग करेंif test 4 -lt 6; then echo test succeeeded; else echo test failed; fi
Wildcard

5

दूसरा तरीका है

test 4 -lt 6 && echo 1 || echo 0

लेकिन उस मामले में सावधान रहें। यदि testसफलता मिलती है और echo 1विफल echo 0हो जाता है ।


2

यदि आप बाहर निकलने के कोड के बजाय मानक आउट पर तुलना का परिणाम चाहते हैं, तो आप expr(1)कमांड का उपयोग कर सकते हैं :

$ expr 4 '<=' 6
1

ध्यान देने योग्य दो बातें:

  1. आपको शेल मेटाचैकर्स के साथ बहुत से संघर्ष के रूप में ऑपरेटर को उद्धृत करने की आवश्यकता होगी
  2. आउटपुट मान के लिए रिटर्न कोड के विपरीत है testtestसच के लिए 0 लौटाता है (जो निकास कोड के लिए मानक है), लेकिन exprसच के लिए 1 प्रिंट करता है।

1
3. एक testशेल बिल्टिन है, जो कि कोरुटिल्स पैकेज से testऔर exprनिष्पादक की तुलना में काफी तेज (मेरी मशीन पर लगभग 50 गुना) है ।
मैनटवर्क

दूसरे बिंदु के लिए +1। एक बग मिल सकता है जो आपको गड़बड़ करने पर खोजने के लिए बहुत निराशाजनक है।
इमैनुएल बर्ग

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