echo
एक echo
कार्यान्वयन जो कड़ाई से एकल यूनिक्स विशिष्टता के अनुरूप है यदि आप करते हैं
echo 'line1\nline2'
लेकिन यह एक विश्वसनीय व्यवहार नहीं है। वास्तव में, वास्तव में कोई मानक व्यवहार नहीं है जिसकी आप अपेक्षा कर सकते हैं echo
।
ऑपरेंड
string
मानक उत्पादन के लिए लिखी जाने वाली एक स्ट्रिंग। यदि पहला ऑपरेंड है -n
, या यदि किसी भी ऑपरेंड में < \
backslash> चरित्र है, तो परिणाम कार्यान्वयन-परिभाषित हैं ।
पर XSI-conformant प्रणाली, अगर पहले संकार्य है -n
, यह एक स्ट्रिंग, माना जाएगा एक विकल्प नहीं है । निम्नलिखित वर्ण अनुक्रम XSI- अनुरूप प्रणाली में किसी भी तर्क के भीतर पहचाने जाएंगे:
\a
- एक <अलर्ट> लिखें ।
\b
- एक <backspace> लिखें ।
\c
- <newline> को दबाएं जो आउटपुट में अंतिम तर्क का अनुसरण करता है। \c
तर्कों में निम्नलिखित सभी पात्रों को अनदेखा किया जाएगा।
\f
- एक <form-feed> लिखें ।
\n
- एक <newline> लिखें ।
\r
- एक <गाड़ी-वापसी> लिखें ।
\t
- एक <टैब> लिखें ।
\v
- एक <ऊर्ध्वाधर-टैब> लिखें ।
\\
- एक <backslash> वर्ण लिखें ।
\0num
- एक 8-बिट वैल्यू लिखें जो शून्य, एक, दो या तीन अंकों वाला ऑक्टल नंबर हो num
।
और इसलिए वास्तव में यह जानने का कोई सामान्य तरीका नहीं है कि कैसे एक नई पंक्ति के साथ लिखना है echo
, सिवाय इसके कि आप आम तौर पर ऐसा echo
करने के लिए बस भरोसा कर सकते हैं ।
एक bash
शेल आमतौर पर विनिर्देश के अनुरूप नहीं होता है , और -n
और अन्य विकल्पों को संभालता है , लेकिन यह भी अनिश्चित है। तुम कर सकते हो:
shopt -s xpg_echo
echo hey\\nthere
hey
there
और यह भी आवश्यक नहीं है किbash
बिल्ड-टाइम विकल्प के साथ बनाया गया है ...
--enable-xpg-echo-default
विकल्प की echo
आवश्यकता के बिना, अंतर्निहित डिफ़ॉल्ट रूप से अंतर्निहित वर्णों का विस्तार करें -e
। यह xpg_echo
शेल विकल्प के डिफ़ॉल्ट मान को सेट करता है on
, जो बैश echo
को एकल यूनिक्स विनिर्देश में निर्दिष्ट संस्करण की तरह अधिक व्यवहार करता है, संस्करण 3. बश बिल्डिंस देखें , जो भागने वाले दृश्यों के विवरण के लिए है echo
।
printf
दूसरी ओर, printf
व्यवहार बहुत तुलनात्मक है।
औचित्य
printf
उपयोगिता कि ऐतिहासिक द्वारा प्रदान की गई है कार्यक्षमता प्रदान करने के लिए जोड़ा गया था echo
। हालांकि, अतिरिक्त के विभिन्न संस्करणों में अपूरणीय अंतर के कारण echo
, संस्करण में कुछ विशेष विशेषताएं हैं, जो इस नई printf
उपयोगिता को छोड़ती हैं , जो कि नौवें संस्करण प्रणाली में एक पर आधारित है।
अतिरिक्त विवरण अनुभाग printf()
आईएसओ सी मानक में लगभग फ़ंक्शन से मेल खाता है , हालांकि इसे XBD फ़ाइल स्वरूप संकेतन में फ़ाइल स्वरूप संकेतन के रूप में वर्णित किया गया है ।
यह प्रारूप स्ट्रिंग्स को संभालता है जो इसके तर्कों का वर्णन करता है - जो किसी भी संख्या में हो सकते हैं, लेकिन स्ट्रिंग्स के लिए या तो %b
स्ट्रिंग्स या शाब्दिक %s
ट्रिंग्स बहुत अधिक हैं । %f
पहली दलील में ऑर्माट्स से इतर, यह एक %b
येट स्ट्रिंग तर्क की तरह सबसे अधिक व्यवहार करता है, सिवाय इसके कि वह \c
भागने से नहीं निपटता ।
printf ^%b%s$ '\n' '\n' '\t' '\t'
^
\n$^ \t$
देखें कि क्यों printf
बेहतर है echo
? अधिक जानकारी के लिए।
echo() printf
आप अपने खुद के मानकों के अनुरूप लिख सकते echo
हैं ...
echo(){
printf '%b ' "$@\n\c"
}
... जो बहुत ज्यादा हमेशा सही काम करना चाहिए स्वचालित रूप से।
वास्तव में, नहीं ... यह \n
तर्क की पूंछ में एक शाब्दिक निशान लगाता है यदि अंतिम तर्क एक विषम संख्या में <backsashes> समाप्त होता है ।
लेकिन यह नहीं है:
echo()
case ${IFS- } in
(\ *) printf %b\\n "$*";;
(*) IFS=\ $IFS
printf %b\\n "$*"
IFS=${IFS#?}
esac
echo
अनिवार्य? आप उपयोग कर सकते हैंprintf
।