我hexdump
像这样转储一个字符串2031 3334 2e30 0a32 2032 3331 302e 000a
。很明显是0x0a
换行符,但是,当我尝试回显该字符串时,我总是得到1 430.2 2 13.0
-- 新行被替换为空格,即使我使用了标志-e
。
可能是什么问题?拖尾会\0
破坏输出吗?还有其他方法可以打印0x0a
新行吗?
谢谢并致以最诚挚的问候。
答案1
该命令的换行符echo
为“\n”。以下面的例子为例:
echo -e "This is line 1\nThis is line 2"
将导致输出
This is line 1
This is line 2
“-e”参数是在这里很重要。
答案2
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
这可能会引起一些混乱。
答案3
我终于用 正确格式化了此字符串printf "$string"
。谢谢大家。