วิธีการพิมพ์อักขระบรรทัดใหม่ด้วย echo


15

ผมถ่ายโอนข้อมูลสตริงด้วยเช่นนี้hexdump 2031 3334 2e30 0a32 2032 3331 302e 000aเป็นที่ชัดเจนว่า0x0aเป็นอักขระบรรทัดใหม่ แต่เมื่อฉันพยายามที่จะสะท้อนสตริงนี้ออกมาฉันมักจะได้รับ1 430.2 2 13.0- บรรทัดใหม่จะถูกแทนที่ด้วยช่องว่างแม้ฉันจะใช้-eธง

อาจมีปัญหาอะไร? tailing \0ทำลายผลลัพธ์หรือไม่? มีทางเลือกอื่นในการพิมพ์0x0aบรรทัดใหม่หรือไม่?

ขอขอบคุณและขอแสดงความนับถือ.


เมื่อฉันพยายามที่จะสะท้อนสตริงนี้ออกมาคุณทำอย่างนั้นได้อย่างไร? คำสั่งที่แน่นอนที่คุณใช้คืออะไร?
Dennis

@Dennis echo -eผมหมายถึง ขอบคุณฉันหาทางออก
Summer_More_More_Tea

ทางออกที่ต้องการเป็นเพียงที่จะใช้แทนprintf "...\n" echo
ไมเคิล

คำตอบ:


26

อักขระบรรทัดใหม่พร้อมechoคำสั่งคือ "\ n" รับตัวอย่างต่อไปนี้:

echo -e "This is line 1\nThis is line 2"

ก็จะส่งผลให้ผลผลิต

This is line 1
This is line 2

พารามิเตอร์ "-e" มีความสำคัญที่นี่


3
btw สิ่งนี้"echo -e ..."ต้องอาศัยเสียงสะท้อนของ bash ในการทำงานอย่างถูกต้อง (เช่นdashจะพิมพ์ "-e"); แต่ '/ bin / echo' อาจ (หรืออาจไม่) ก็ได้เช่นกัน น่าเสียดาย (อาจเหมาะสม) มีเสียงสะท้อนอยู่รอบตัวและคุณไม่ต้องการที่จะสนใจสิ่งที่คุณจะได้รับ การใช้'printf "....\n"เป็นตัวเลือกที่พกพาได้มากกว่าสำหรับ env และ shells
ไมเคิล

@michael_n ซึ่งเป็นสิ่งที่ในที่สุด OP ก็หวนกลับมาเหมือนกันในความเป็นจริง แต่คำถามก็ระบุว่า "ด้วยเสียงสะท้อน" อย่างชัดเจน - ดังนั้นคำตอบของฉันในลักษณะนี้ อย่างไรก็ตามมันไม่ใช่ "กับ Bash" - ขอบคุณมากสำหรับการชี้ให้เห็นความแตกต่างเหล่านั้น!
อิซซี่

4

POSIX 7 บอกว่าคุณทำไม่ได้

http://pubs.opengroup.org/onlinepubs/9699919799/utilities/echo.html

-e ไม่ได้ถูกกำหนดและแบ็กสแลชเป็นการใช้งานที่กำหนดไว้:

หากตัวถูกดำเนินการตัวแรกคือ -n หรือถ้าตัวถูกดำเนินการตัวใดตัวหนึ่งมีอักขระ <backslash> ผลลัพธ์จะถูกกำหนดตามการนำไปใช้

ยกเว้นว่าคุณมีนามสกุล XSI ซึ่งเป็นตัวเลือก

ใช้printfแทน:

ตัวถูกดำเนินการรูปแบบจะต้องใช้เป็นสตริงรูปแบบที่อธิบายไว้ในสัญกรณ์รูปแบบไฟล์ XBD [... ]

โน้ตรูปแบบไฟล์ :

\ n <newline> ย้ายตำแหน่งการพิมพ์ไปที่จุดเริ่มต้นของบรรทัดถัดไป

พึงระลึกไว้เสมอว่า Ubuntu 15.10 และ distros ส่วนใหญ่ใช้งานechoทั้งสองอย่างดังนี้:

  • Bash ในตัว: help echo
  • ปฏิบัติการแบบสแตนด์อโลน: which echo

ซึ่งอาจนำไปสู่ความสับสน


2

printf "$string"ในที่สุดผมก็ต้องจัดรูปแบบสายนี้ด้วย ขอบคุณทุกคน.


สิ่งนี้$stringที่คุณพูดถึงคืออะไร? สิ่งนี้เชื่อมโยงกับคำถามได้อย่างไร มันไม่เกี่ยวข้องอะไร\nเหมือนในอีกสองคำตอบ?
Peter Mortensen
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.