2017-02-15 9 views
7

मैं क्यों निम्न में से 1.लिनक्स ग्रेप वापसी कोड

echo 'Total' | grep -c No 
0 

तो "नहीं" "कुल" में नहीं मौजूद है है एक कोड लौटा रहा है देखने के लिए संघर्ष कर रहा हूँ। लेकिन फिर इसके रिटर्न कोड को देखकर मैं इसे 1.

echo $? 
1 

रिटर्न कोड 1 के रूप में क्यों दिख रहा है? क्या इस से निकाल पाने के लिए कोई तरीका है?

+0

'grep' केवल तभी वापस लौटाएगा जब कुछ स्ट्रिंग मेल हो जाए। यह नियम 'grep -c' के लिए भी लागू है। –

उत्तर

7

man grep पृष्ठ के अनुसार, -c ध्वज के लिए

-c, --count दबाने सामान्य उत्पादन है, इसके बजाय प्रत्येक इनपुट फ़ाइल के लिए मिलान लाइनों की गिनती मुद्रित करें।

तो क्या आप देख रहे हैं मैच की गिनती है और grep मैच के निकास कोड के साथ भ्रमित होने की नहीं। कोड 1 इनपुट से मेल खाने वाली कोई भी लाइन नहीं है।

अन्य मामले पर एक नज़र,

echo 'No' | grep -c No 
1 

echo $? 
0 

इसके अलावा man grep पृष्ठ पर EXIT CODES पर पढ़ने के लिए,

बाहर निकलें स्थिति आम तौर पर बाहर निकलें स्थिति है 0 अगर एक लाइन चुना जाता है, 1 है यदि कोई लाइन नहीं चुनी गई थी, और 2 अगर कोई त्रुटि हुई।

6

निकास कोड 1 है क्योंकि grep द्वारा कुछ भी मेल नहीं खाता था।

एक्स्टिट स्थिति यदि चयनित लाइनें पाई जाती हैं और 1 नहीं मिलती है तो बाहर निकलने की स्थिति 0 होती है। (: '2' या अधिक से अधिक के लिए कोड से निपटने POSIX त्रुटि की जाँच करनी चाहिए नोट।)

उत्पादन शून्य है क्योंकि 'कुल' की गिनती शून्य है कोई त्रुटि है तो बाहर निकलने स्थिति उत्पन्न हुई 2. है। यह -सी विकल्प के कारण:

-c, - गणना सामान्य आउटपुट दबाएं; इसके बजाय प्रत्येक इनपुट फ़ाइल के लिए मिलान लाइनों की गिनती मुद्रित करें। -v, --invert-match विकल्प के साथ (नीचे देखें), गैर मिलान वाली रेखाओं की गणना करें। (-सी को POSIX द्वारा निर्दिष्ट किया गया है।)

यदि आप 0 से बाहर निकलने के लिए मजबूर करना चाहते हैं, तो आप केवल संलग्न कर सकते हैं || आपके आदेश के लिए सही: गूंज 'कुल' | grep -c नहीं || सच

संबंधित मुद्दे