आप उन सभी को पुनर्निर्देशित कर सकते हैं जो आप चाहते हैं, 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?