आप उन सभी को पुनर्निर्देशित कर सकते हैं जो आप चाहते हैं, echo
लेकिन यह इसके साथ कुछ नहीं करेगा। echo
इसके मानक इनपुट को नहीं पढ़ता है। यह सब मानक उत्पादन के लिए एक अंतरिक्ष चरित्र द्वारा अलग किए गए अपने तर्कों को लिखता है और एक नई लाइन वर्ण द्वारा समाप्त होता है (और कुछ echo
कार्यान्वयन के साथ उनमें से कुछ एस्केप अनुक्रमों का विस्तार और / या तर्कों को -
संभवतः विकल्पों के रूप में माना जाता है) के साथ शुरू होता है ।
यदि आप echo
किसी फ़ाइल की सामग्री प्रदर्शित करना चाहते हैं , तो आपको उस सामग्री को एक तर्क के रूप में पास करना होगा echo
। कुछ इस तरह:
echo "$(cat my_file.txt)"
ध्यान दें कि $(...)
अनुगामी न्यू लाइन चरित्र स्ट्रिप्स रों कि के उत्पादन से cat
आदेश है, और echo
कहते हैं एक वापस।
यह भी ध्यान दें कि इसके अलावा zsh
, आप NUL वर्णों को कमांड के तर्कों में पारित नहीं कर सकते हैं, ताकि ऊपर बाइनरी फ़ाइलों के साथ आम तौर पर काम न करें। yash
उन बाइट्स को भी हटा देगा जो मान्य वर्णों का हिस्सा नहीं हैं।
अगर ऐसा करना चाहते के लिए कारण यह है कि आप चाहते हैं echo
विस्तार करने के लिए \n
, \b
, \0351
... फ़ाइल में भागने दृश्यों (यूनिक्स अनुरूप के रूप में echo
कार्यान्वयन करते हैं, लेकिन सभी नहीं ), तो आप इसके बजाय का उपयोग करें printf
के बजाय :
printf '%b\n' "$(cat my_file.txt)"
के विपरीत echo
, कि एक पोर्टेबल है और समस्या नहीं होगी अगर फ़ाइल की सामग्री के साथ शुरू होता है -
।
करने के लिए एक विकल्प के रूप $(cat file)
, के साथ ksh
, zsh
और bash
, एक भी कर सकते हैं: $(<file)
। यह एक विशेष ऑपरेटर है, जिसके अनुसार शेलcat
विस्तार करने के लिए फ़ाइल की सामग्री को पढ़ने के लिए विरोध करता है। यह अभी भी NUL बाइट्स को छोड़कर, अनुगामी newlines स्ट्रिप्स और चुटकी लेती है zsh
। में bash
, वह अभी भी एक अतिरिक्त प्रक्रिया की मांग करता है। यह भी ध्यान दें कि एक अंतर यह है कि इस तरह की डायरेक्टरी की फाइल पढ़ने की कोशिश करने पर आपको कोई त्रुटि नहीं होगी। इसके अलावा, जबकि $(< file)
विशेष है, अन्य शेल का अनुकरण नहीं कर रहा है $(< file; other command)
( zsh
जब, अभी भी की सामग्री का विस्तार होगा file
, निहित $READNULLCMD
आदेश (आमतौर पर पेजर) चलाकर ।
echo
?