如何使用回显打印新行字符?

Sum*_*Tea 17 bash shell shell-script newlines echo

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

可能是什么问题?尾矿会\0破坏输出吗?有没有其他方法可以打印0x0a新行?

谢谢和最好的问候。

Izz*_*zzy 27

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

echo -e "This is line 1\nThis is line 2"
Run Code Online (Sandbox Code Playgroud)

会导致输出

This is line 1
This is line 2
Run Code Online (Sandbox Code Playgroud)

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

  • 顺便说一句,这个 `"echo -e ..."` 依赖于 bash 的 echo 才能正常工作(例如,`dash` 只会打印“-e”);但 '/bin/echo' 可能(也可能不)也有效。不幸的是(也许是恰当的),周围有很多回声,你真的不想关心你会得到哪一个。使用 `'printf "....\n"` 是一种跨环境和 shell 的更便携的选项。 (3认同)

Cir*_*郝海东 5

POSIX 7 说你不能

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

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

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

除非您有可选的 XSI 扩展。

所以printf改用:

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

文件格式符号

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

还要记住,Ubuntu 15.10 和大多数发行版都实现echo了:

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

这可能会导致一些混乱。