如何打印新行?这只会打印\n:

$ echo -e "Hello,\nWorld!"
Hello,\nWorld!

当前回答

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独立的可执行文件:哪个echo

这可能导致一些混淆。

其他回答

我只使用echo而不使用任何参数:

echo "Hello"
echo
echo "World"

如果前面的答案不起作用,并且需要从函数中获取返回值:

function foo()
{
    local v="Dimi";
    local s="";
    .....
    s+="Some message here $v $1\n"
    .....
    echo $s
}

r=$(foo "my message");
echo -e $r;

只有这个技巧在我使用Bash版本开发的Linux系统上有效:

GNU bash, version 2.2.25(1)-release (x86_64-redhat-linux-gnu)

对于所问的问题(不是特殊字符等),只将双引号改为单引号。

echo -e 'Hello,\nWorld!'

结果如下:

Hello,
World!

其他解决方案:

在某些情况下,您必须回显多行长内容(例如代码/配置)

例如:

生成代码/配置的Bash脚本

echo-e,printf可能有一些限制

您可以使用一些特殊字符作为占位符作为换行符(例如~),并在使用tr创建文件后替换它:

echo ${content} | tr '~' '\n' > $targetFile

它需要调用另一个程序(tr),这应该很好,IMO。

echo $'hello\nworld'

印刷品

hello
world

$“”字符串使用ANSI C报价:

$‘string’形式的单词被特别对待。单词扩展为字符串,并按照ANSI C标准的规定替换反斜杠转义字符。