如何用echo打印换行符?


15

我用hexdump这样的方式转储字符串2031 3334 2e30 0a32 2032 3331 302e 000a。很明显,这0x0a是换行符,但是,当我尝试回显此字符串时,总会得到1 430.2 2 13.0-用空格替换新行,即使我使用了-e标志。

可能是什么问题?拖尾会\0破坏输出吗?是否有其他选择来打印0x0a新行?

谢谢和最好的问候。


当我尝试回显此字符串时,您如何做到这一点?您使用的确切命令是什么?
丹尼斯

@丹尼斯,我的意思是echo -e。谢谢,我找到了解决方案。
Summer_More_More_Tea 2012年

1
首选解决方案是仅使用printf "...\n"而不是echo
迈克尔

Answers:


26

echo命令的换行符为“ \ n”。以以下示例为例:

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

会导致输出

This is line 1
This is line 2

“ -e”参数在这里重要。


3
顺便说一句,这"echo -e ..."依赖于bash的echo才能正常工作(例如,dash将仅打印“ -e”);但是'/ bin / echo'可能(也可能不会)也起作用。不幸的是(也许适当地),周围有很多回声,而您实际上并不想关心要获得哪一个。使用'printf "....\n"是在环境和外壳之间更可移植的选项。
迈克尔

实际上,OP最终也恢复了 @michael_n 。但是问题是明确指出“有回声” –因此我以这种方式回答。无论如何,它不是“用Bash”-感谢您指出这些差异!
Izzy 2015年

5

POSIX 7说你不能

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

-e 未定义,反斜杠是实现定义:

如果第一个操作数是-n,或者任何操作数包含<backslash>字符,则结果是实现定义的。

除非您具有可选的XSI扩展名。

因此printf改用:

格式操作数应用作XBD文件格式符号[...]中描述的格式字符串

文件格式符号

\ n <newline>将打印位置移至下一行的开头。

还请记住,Ubuntu 15.10和大多数发行版都实现了以下echo两者:

  • 一个Bash内置的: help echo
  • 一个独立的可执行文件: which echo

可能会导致一些混乱。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.