Làm thế nào để in ký tự dòng mới với echo?


15

Tôi đổ một chuỗi với hexdumpnhư thế này 2031 3334 2e30 0a32 2032 3331 302e 000a. Rõ ràng đó 0x0alà ký tự dòng mới, tuy nhiên, khi tôi cố gắng lặp lại chuỗi này, tôi luôn nhận được 1 430.2 2 13.0- dòng mới được thay thế bằng khoảng trắng, thậm chí tôi sử dụng -ecờ.

Điều gì có thể là vấn đề? Liệu đuôi có \0làm hỏng đầu ra? Có sự thay thế nào để in 0x0amột dòng mới không?

Trân trọng cảm ơn.


Khi tôi cố gắng lặp lại chuỗi này Làm thế nào chính xác để bạn làm điều đó? Lệnh chính xác bạn sử dụng là gì?
Dennis

@Dennis Ý tôi là echo -e. Cảm ơn, tôi tìm một giải pháp.
Summer_More_More_Tea

1
giải pháp ưa thích chỉ là sử dụng printf "...\n"thay vì echo.
michael

Câu trả lời:


26

Ký tự dòng mới với echolệnh là "\ n". Lấy ví dụ sau:

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

Sẽ dẫn đến kết quả đầu ra

This is line 1
This is line 2

Tham số "-e" rất quan trọng ở đây.


3
btw, điều này "echo -e ..."phụ thuộc vào tiếng vang của bash để hoạt động chính xác (ví dụ: dashsẽ chỉ in "-e"); nhưng '/ bin / echo' có thể (hoặc có thể không) cũng hoạt động. Thật không may (có lẽ là thích hợp), có rất nhiều tiếng vang xung quanh và bạn không thực sự muốn quan tâm đến cái mà bạn sẽ nhận được. Sử dụng 'printf "....\n"là một tùy chọn di động hơn trên env và shell.
michael

@michael_n, đó là những gì OP cuối cùng cũng hoàn nguyên . Nhưng câu hỏi được nêu rõ ràng "với tiếng vang" - do đó câu trả lời của tôi theo cách này. Nhưng dù sao, đó không phải là "với Bash" - vì vậy cảm ơn bạn đã chỉ ra những khác biệt đó!
Izzy

4

POSIX 7 nói rằng bạn không thể

http://pub.opengroup.org/onlinepub/9699919799/utilities/echo.html

-e không được xác định và dấu gạch chéo ngược được thực hiện được xác định:

Nếu toán hạng đầu tiên là -n hoặc nếu bất kỳ toán hạng nào chứa ký tự <backslash>, kết quả được xác định theo thực hiện.

trừ khi bạn có một phần mở rộng XSI tùy chọn.

Vì vậy, sử dụng printfthay thế:

toán hạng định dạng sẽ được sử dụng làm chuỗi định dạng được mô tả trong Ký hiệu định dạng tệp XBD [...]

các định dạng tập tin Notation :

\ n <newline> Di chuyển vị trí in sang đầu dòng tiếp theo.

Ngoài ra, hãy nhớ rằng Ubuntu 15.10 và hầu hết các bản phân phối đều triển khai echocả hai như:

  • một Bash tích hợp: help echo
  • một thực thi độc lập: which echo

có thể dẫn đến một số nhầm lẫn.


2

Cuối cùng tôi định dạng đúng chuỗi này với printf "$string". Cảm ơn tất cả.


Đây là những gì $stringbạn nói về? Làm thế nào điều này được kết nối với câu hỏi? Điều gì không liên quan \nnhư trong hai câu trả lời khác?
Peter Mortensen
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.