คุณสามารถเปลี่ยนเส้นทางทั้งหมดที่คุณต้องการ 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
?