คุณสามารถเปลี่ยนเส้นทางทั้งหมดที่คุณต้องการ echoแต่มันจะไม่ทำอะไรกับมัน echoไม่อ่านอินพุตมาตรฐาน สิ่งที่มันทำคือเขียนไปยังเอาต์พุตมาตรฐานอาร์กิวเมนต์ของมันคั่นด้วยอักขระช่องว่างและยกเลิกโดยอักขระบรรทัดใหม่ (และมีechoการใช้งานบางอย่างที่มีลำดับ escape บางอย่างในพวกเขาขยายและ / หรืออาร์กิวเมนต์เริ่มต้นด้วย-ถือว่าเป็นตัวเลือก)
หากคุณต้องการที่จะแสดงเนื้อหาของไฟล์ที่คุณต้องผ่านเนื้อหาที่เป็นอาร์กิวเมนต์ไปยังecho echoสิ่งที่ต้องการ:
echo "$(cat my_file.txt)"
โปรดทราบว่า$(...)แถบตัวอักษรต่อท้ายบรรทัดใหม่sจากการแสดงผลของการที่catคำสั่งและechoเพิ่มหนึ่งกลับ
นอกจากนี้โปรดทราบว่ายกเว้นด้วยzshคุณจะไม่สามารถส่งผ่านอักขระ NUL ในอาร์กิวเมนต์ของคำสั่งดังนั้นโดยทั่วไปจะไม่สามารถทำงานกับไฟล์ไบนารีได้ yashจะลบไบต์ที่ไม่ได้เป็นส่วนหนึ่งของอักขระที่ถูกต้องด้วย
ถ้าเหตุผลเพื่อต้องการที่จะทำเช่นนั้นเป็นเพราะคุณต้องการechoที่จะขยาย\n, \b, \0351... ลำดับหนีในแฟ้ม (เป็น UNIX ที่สอดคล้องกับechoการใช้งานที่ทำแต่ไม่ทั้งหมด ) แล้วคุณอยากจะใช้printfแทน :
printf '%b\n' "$(cat my_file.txt)"
ตรงกันข้ามกับที่หนึ่งเป็นแบบพกพาและจะไม่ได้มีปัญหาหากเนื้อหาของแฟ้มเริ่มต้นด้วยecho-
เป็นทางเลือกให้$(cat file), กับksh, zshและbash$(<file)หนึ่งยังสามารถทำได้: นั่นเป็นโอเปอเรเตอร์พิเศษที่เชลล์ทำการcatอ่านเนื้อหาของไฟล์เพื่อทำการขยายตัว มันก็ยังคงแถบบรรทัดใหม่ต่อท้ายและฉายาใน NUL zshไบต์ยกเว้นใน ในbashที่ยังคงมีกระบวนการพิเศษ โปรดทราบว่าข้อแตกต่างอย่างหนึ่งคือคุณจะไม่ได้รับข้อผิดพลาดใด ๆ หากพยายามอ่านไฟล์ประเภทไดเรกทอรีด้วยวิธีดังกล่าว นอกจากนี้ในขณะที่$(< file)พิเศษ$(< file; other command)ไม่ได้ (ในzshเมื่อไม่เลียนแบบเชลล์อื่น ๆ ที่จะยังคงขยายเนื้อหาของfile, โดยการรันคำสั่งโดยนัย $READNULLCMD (โดยทั่วไปคือเพจเจอร์))
echo?