“Wc -c” प्रतिध्वनि के साथ एक और अधिक मूल्य क्यों छापता है?


13

दौड़ते समय

echo abcd | wc -c

यह लौट आता है 5
लेकिन यह शब्द abcdकेवल 4 वर्ण लंबा है।

क्या echoशब्द के बाद कुछ विशेष चरित्र की छपाई होती है abcd?

और क्या मैं उसे echoछापने से रोक सकता हूं ?



1
कृपया ध्यान रखें कि आपको wc -cयह नहीं बताया गया है कि कुछ वर्ण कितने हैं; यह केवल यह बताता है कि यह कितने बाइट्स है।
1

जवाबों:


21

echo\nलाइन के अंत में न्यूलाइन ( ) प्रिंट करें

echo abcd | xxd
0000000: 6162 6364 0a          abcd.

कुछ echoकार्यान्वयन के साथ , आप उपयोग कर सकते हैं -n:

-n अनुगामी न्यूलाइन को आउटपुट न करें

और परीक्षण:

echo -n abcd | wc -c
4

कुछ अन्य लोगों के साथ, आपको \cभागने का क्रम चाहिए:

\c: इसे दबाएं <newline>अन्यथा आउटपुट में अंतिम तर्क का अनुसरण करता है। '\c'तर्कों में निम्नलिखित सभी पात्रों को अनदेखा किया जाएगा।

echo -e 'abcd\c' | wc -c
4

आंशिक रूप से, उपयोग करें printf:

printf %s abcd | wc -c
4

(ध्यान दें कि wc -cबाइट्स गिना जाता है, वर्ण नहीं (हालांकि abcdवे आम तौर पर समकक्ष होते हैं)। wc -mवर्णों की गणना करने के लिए उपयोग करें )।


ध्यान दें कि बिंदु कुछ echoकार्यान्वयन (कम से कम सभी यूनिक्स का अनुपालन करने वाले) के साथ है, यह अकेले echo 'abcd\c'आउटपुट abcdहै। echo -e 'abcd\c'यूनिक्स के अनुरूप echoकार्यान्वयन में उत्पादन होगा -e abcd
स्टीफन चेज़लस

5

यदि आप विकल्प के echoबिना चलते हैं -n, तो यह तर्कों के बाद एक नया चरित्र लिखता है। अन्यथा, यदि आपने टाइप किया है echo foo, तो आपका अगला शेल प्रॉम्प्ट दाईं ओर दिखाई देगा foo। इसलिए  wcनई लाइन की गिनती कर रहा है।

मैं इसे कैसे echoप्रिंट करने से रोक सकता हूं ?

echo -n abcd | wc -c

2

डिफ़ॉल्ट रूप से, स्ट्रिंग के बाद echoएक नई लाइन वर्ण ( \n) प्रिंट करेगा ( यही कारण है कि आप उसी लाइन के बजाय शेल को प्रॉम्प्ट देखते हैं जहां abcdमुद्रित किया गया है।)

आप अनुगामी न्यूलाइन वर्ण को अक्षम -nकरने के echoलिए एक पैरामीटर जोड़ने की कोशिश कर सकते हैं ।

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