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

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

当前回答

如果您正在编写脚本,并且将多次将换行符作为其他消息的一部分进行回显,那么一个不错的跨平台解决方案是在变量中添加一个文本换行符,如下所示:

newline='
'

echo "first line${newline}second line"
echo "Error: example error message n${newline}${usage}" >&2 #requires usage to be defined

其他回答

echo $'hello\nworld'

印刷品

hello
world

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

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

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

这可能导致一些混淆。

这让我到了那里。。。。

outstuff=RESOURCE_GROUP=[$RESOURCE_GROUP]\\nAKS_CLUSTER_NAME=[$AKS_CLUSTER_NAME]\\nREGION_NAME=[$REGION_NAME]\\nVERSION=[$VERSION]\\nSUBNET-ID=[$SUBNET_ID]
printf $outstuff

产量:

RESOURCE_GROUP=[akswork-rg]
AKS_CLUSTER_NAME=[aksworkshop-804]
REGION_NAME=[eastus]
VERSION=[1.16.7]
SUBNET-ID=[/subscriptions/{subidhere}/resourceGroups/makeakswork-rg/providers/Microsoft.Network/virtualNetworks/aks-vnet/subnets/aks-subnet]

改用printf:

printf "hello\nworld\n"

printf在不同环境中的表现比echo更一致。

这最好作为

x="\n"
echo -ne $x

-e选项将解释转义序列的反斜杠-n选项将删除输出中的尾随换行符

PS:命令echo的效果是始终在输出中包含一个尾随换行符,因此需要-n来关闭该功能(并使其不那么混乱)