जवाबों:
अधिमान्य और सबसे अधिक व्यापक रूप से इस्तेमाल किया जाने वाला सामान एक ही चीज नहीं है। जबकि printfकई कारणों से बेहतर है, ज्यादातर लोग अभी भी उपयोग करते हैं echoक्योंकि वाक्य रचना सरल है।
आपको क्यों पसंद करना चाहिए इसके मुख्य कारण printfहैं:
echo मानकीकृत नहीं है, यह अलग-अलग प्रणालियों पर अलग-अलग व्यवहार करेगा।यह अनुमान लगाना कठिन है कि आप वास्तव में क्या चल रहे हैं जब आप echo foo। वर्णन करने के लिए, मेरे डेबियन सिस्टम पर:
$ type -a echo
echo is a shell builtin
echo is /bin/echo
जैसा कि आप देख सकते हैं, दो अलग-अलग echoकमांड हैं, एक शेल (इस मामले में बैश) बिलिन है और दूसरा एक अलग बाइनरी है। ध्यान दें कि bashइसमें एक printfबिल्डिन भी है, लेकिन इसका व्यवहार अधिक मानकीकृत है, इसलिए यह एक समस्या से कम है (इसे इंगित करने के लिए @ RaduRădeanu के लिए धन्यवाद)।
चूंकि कुछ (लेकिन सभी नहीं) echoसमर्थन कमांड लाइन स्विच के कार्यान्वयन , यह एक स्ट्रिंग को प्रिंट करना मुश्किल है जो एक से शुरू होता है -। जबकि कई कार्यक्रम --स्विच के अंत और तर्कों की शुरुआत का उदाहरण देने के लिए समर्थन करते हैं (उदाहरण के लिए, इसमें grep -- -a fileमौजूद लाइनें fileमिलेंगी -a), echoनहीं। तो, आपके पास echoप्रिंट कैसे है -n?
$ echo -n ## no output
$ echo '-n' ## no output
$ echo "-n" ## no output
$ echo \-n ## no output
$ echo -e '\055n' ## using the ASCII code works but only on implementations
-n ## that support -e
printf इसे आसानी से कर सकते हैं:
$ printf -- '-n\n'
-n
$ printf '%s\n' -n
-n
$ printf '\055n\n'
-n
इससे बेहतर जानकारी के लिए आप कभी जानना चाहते हैं कि इससे printfबेहतर क्यों है echo, http://unix.stackexchange.com पर इसी तरह के सवाल का जवाब देखें :
printfबेहतर दुभाषिया के रूप में पसंद करने में मदद करता है ।
printf(देखें type -a) के लिए सच है ।
printfअधिक सख्ती से परिभाषित किया गया है और मुझे लगता है कि बिलिन एक ही मानक का पालन करता है। POSIX चश्मा के लिए echoदूसरी तरफ कम सख्त और यहां तक कि स्पष्ट रूप से कहा गया है कि वहाँ कार्यान्वयन और उस के बीच मतभेद हो जाएगा रहे हैं printfप्राथमिकता दी जानी चाहिए।
echo। क्या वो सही है?
echoबजाय उपयोग करने का एकमात्र कारण यह printfहै कि फ़ॉर्म सरल हो सकता है। यदि आप जानते हैं कि आप क्या छाप रहे हैं, echo fooतो तेजी से टाइप करना आसान है printf 'foo\n'। इसके अलावा, स्क्रिप्ट लिखते समय जहां एक चर को मुद्रित करने की आवश्यकता होती है, उपयोग करने का एक अच्छा कारण कभी नहीं होता है echo।
पूछने के लिए जो बेहतर है वह खुद अधूरा है।
यदि सभी करना चाहते हैं, तो एक या एक से अधिक लाइनों को टेक्स्टलाइन द्वारा समाप्त कर दिया जाता है , फिर प्रतिध्वनित होता है। यदि अधिक चतुर कुछ भी करने का इरादा है, विशेष रूप से एक "आंशिक रेखा" जिसमें न्यूलाइन नहीं है, तो उस उद्देश्य के लिए प्रिंटफ़ सबसे अच्छा है ।
echoकार्यान्वयन के आधार पर , "नई रेखा से परहेज" आसानी से किया जाता है echo -n। वास्तव में, -nइको की विशेषताओं में सबसे पोर्टेबल है। POSIX के अनुसार, यह SystemV से अनुपस्थित है, लेकिन अधिकांश यूनियनों में मौजूद है।
-nबीएसडी और सिस्टमवी के लिए भरोसा कर सकते हैं लेकिन कुछ भी हो, मुझे कुछ पता नहीं है।