बेहतर प्रिंट या गूंज कौन सा है?


16

संदेश और प्रिंट डेटा प्रदर्शित करने के लिए दो कमांड उपलब्ध हैं printfऔर echo
फिर वे अलग-अलग कैसे इस्तेमाल करते थे? कौन सा अधिक बेहतर है?


8
इसका जवाब आपको यहां मिलेगा: unix.stackexchange.com/a/65819
user218740

जवाबों:


27

अधिमान्य और सबसे अधिक व्यापक रूप से इस्तेमाल किया जाने वाला सामान एक ही चीज नहीं है। जबकि printfकई कारणों से बेहतर है, ज्यादातर लोग अभी भी उपयोग करते हैं echoक्योंकि वाक्य रचना सरल है।

आपको क्यों पसंद करना चाहिए इसके मुख्य कारण printfहैं:

  1. echo मानकीकृत नहीं है, यह अलग-अलग प्रणालियों पर अलग-अलग व्यवहार करेगा।
  2. यह अनुमान लगाना कठिन है कि आप वास्तव में क्या चल रहे हैं जब आप echo foo। वर्णन करने के लिए, मेरे डेबियन सिस्टम पर:

    $ type -a echo
    echo is a shell builtin
    echo is /bin/echo
    

    जैसा कि आप देख सकते हैं, दो अलग-अलग echoकमांड हैं, एक शेल (इस मामले में बैश) बिलिन है और दूसरा एक अलग बाइनरी है। ध्यान दें कि bashइसमें एक printfबिल्डिन भी है, लेकिन इसका व्यवहार अधिक मानकीकृत है, इसलिए यह एक समस्या से कम है (इसे इंगित करने के लिए @ RaduRădeanu के लिए धन्यवाद)।

  3. चूंकि कुछ (लेकिन सभी नहीं) 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 पर इसी तरह के सवाल का जवाब देखें :

/unix//a/65819/22222


1
अच्छा जवाब दिया। यह मुझे printfबेहतर दुभाषिया के रूप में पसंद करने में मदद करता है ।
पंड्या

3
बिंदु 2 पर: वही printf(देखें type -a) के लिए सच है ।
राडू राईडेनू

2
@ RaduRădeanu सच है, लेकिन POSIX में printfअधिक सख्ती से परिभाषित किया गया है और मुझे लगता है कि बिलिन एक ही मानक का पालन करता है। POSIX चश्मा के लिए echoदूसरी तरफ कम सख्त और यहां तक कि स्पष्ट रूप से कहा गया है कि वहाँ कार्यान्वयन और उस के बीच मतभेद हो जाएगा रहे हैं printfप्राथमिकता दी जानी चाहिए।
तेरह

वाह। तो वहाँ का उपयोग करने के लिए शाब्दिक शून्य उद्देश्य तकनीकी फायदे हैं echoक्या वो सही है?
जेम्सइव्यूड्यूड

1
@JamesTheAwesomeDude नहीं, बिल्कुल कोई तकनीकी लाभ नहीं। इसके echoबजाय उपयोग करने का एकमात्र कारण यह printfहै कि फ़ॉर्म सरल हो सकता है। यदि आप जानते हैं कि आप क्या छाप रहे हैं, echo fooतो तेजी से टाइप करना आसान है printf 'foo\n'। इसके अलावा, स्क्रिप्ट लिखते समय जहां एक चर को मुद्रित करने की आवश्यकता होती है, उपयोग करने का एक अच्छा कारण कभी नहीं होता है echo
टेराडन

4

पूछने के लिए जो बेहतर है वह खुद अधूरा है।

यदि सभी करना चाहते हैं, तो एक या एक से अधिक लाइनों को टेक्स्टलाइन द्वारा समाप्त कर दिया जाता है , फिर प्रतिध्वनित होता है। यदि अधिक चतुर कुछ भी करने का इरादा है, विशेष रूप से एक "आंशिक रेखा" जिसमें न्यूलाइन नहीं है, तो उस उद्देश्य के लिए प्रिंटफ़ सबसे अच्छा है ।


echoकार्यान्वयन के आधार पर , "नई रेखा से परहेज" आसानी से किया जाता है echo -n। वास्तव में, -nइको की विशेषताओं में सबसे पोर्टेबल है। POSIX के अनुसार, यह SystemV से अनुपस्थित है, लेकिन अधिकांश यूनियनों में मौजूद है।
टेराडॉन

मैंने काफी अलग-अलग यूनियनों में काम किया है, जो इको के साथ नई कहानियों से बचने की कोशिश भी नहीं करते हैं। एससीओ, एआईएक्स, एचपी-यूएक्स और लिनक्स में पोर्टेबल स्क्रिप्ट लिखना चुनौतीपूर्ण है।
मोंटी हार्डर

ओह बिल्कुल, वहाँ कोई तर्क नहीं। मैं सिर्फ इतना कह रहा हूं कि न्यूलाइन कम से कम समस्याएं हैं। जैसे ही आप गैर-जीएनयू सिस्टम में पोर्ट करने की कोशिश करते हैं, सभी दांव बंद हो जाते हैं। मुझे लगता है कि आप -nबीएसडी और सिस्टमवी के लिए भरोसा कर सकते हैं लेकिन कुछ भी हो, मुझे कुछ पता नहीं है।
टेराडॉन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.