如何打印换行符?这只打印\n:
\n
$ echo -e "Hello,\nWorld!"Hello,\nWorld!
确保你在Bash。
$ echo $0bash
这四种方法都适合我:
echo -e "Hello\nworld"echo -e 'Hello\nworld'echo Hello$'\n'worldecho Hello ; echo world
使用printf代替:
printf
printf "hello\nworld\n"
printf在不同环境中的行为比echo更一致。
echo
echo $'hello\nworld'
印刷品
helloworld
$''字符串使用ANSI C报价:
$''
$'string'形式的单词被特殊处理。该单词扩展到字符串,用ANSI C标准指定的反斜杠转义字符替换。
$'string'
str='hello\nworld'$ echo | sed "i$str"helloworld
如果有人发现自己把头撞在墙上,试图弄清楚为什么同事的脚本不会打印换行符,请注意:
#!/bin/bashfunction GET_RECORDS(){echo -e "starting\n the process";} echo $(GET_RECORDS);
如上所述,方法的实际运行本身可能被包裹在一个回声中,它取代了方法本身中可能存在的任何回声。显然,为了简洁起见,我淡化了这一点。它不那么容易被发现!
然后你可以告诉你的同伴,执行函数的更好方法是这样的:
#!/bin/bashfunction GET_RECORDS(){echo -e "starting\n the process";} GET_RECORDS;
如果前面的答案不起作用,并且需要从它们的函数中获取返回值:
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 ""。
echo ""
例如,
echo "Hello,"echo ""echo "World!"
你也可以使用带括号的回声,
$ (echo hello; echo world)helloworld
我的脚本:
echo "WARNINGS: $warningsFound WARNINGS FOUND:\n$warningStrings
输出:
WARNING : 2 WARNINGS FOUND:\nWarning, found the following local orphaned signature file:
在我的Bash脚本中,我像你一样生气,直到我刚刚尝试过:
echo "WARNING : $warningsFound WARNINGS FOUND:$warningStrings"
只需点击输入即可插入该跳转。现在的输出是:
WARNING : 2 WARNINGS FOUND:Warning, found the following local orphaned signature file:
回声上的POSIX 7
http://pubs.opengroup.org/onlinepubs/9699919799/utilities/echo.html
-e未定义,反斜杠是实现定义的:
-e
如果第一个操作数是-n,或者任何操作数包含<反斜杠>字符,则结果是实现定义的。
除非您有可选的XSI扩展。
所以我建议你应该使用#0,这是明确规定的:
格式操作数应用作XBD文件格式表示法中描述的格式字符串[…]
的文件格式符号:
\n将打印位置移动到下一行的开头。
还要记住,Ubuntu 15.10和大多数发行版都实现了echo:
help echo
which echo
这可能会导致一些混乱。
这可以更好地作为
x="\n"echo -ne $x
-e选项将解释转义序列的反转-n选项将删除输出中的尾随换行符
PS:命令echo具有始终在输出中包含尾随换行符的效果,因此需要-n来关闭该东西(并使其不那么混乱)
有时您可以传递多个由空格分隔的字符串,它将被解释为\n。
例如,当使用外壳脚本进行多行通知时:
#!/bin/bashnotify-send 'notification success' 'another line' 'time now '`date +"%s"`
在Bash 4.4中添加了一个新的参数展开来解释转义序列:
${parameter@operator} - E operator扩展是一个字符串,它是参数的值反斜杠转义序列扩展为$'…'引用机制。
${parameter@operator} - E operator
扩展是一个字符串,它是参数的值反斜杠转义序列扩展为$'…'引用机制。
$'…'
$ foo='hello\nworld'$ echo "${foo@E}"helloworld
你也可以这样做:
echo "helloworld"
这在脚本内部和命令行中都有效。
在命令行上,按Shift+输入在字符串中执行换行符。
这适用于我的macOS和我的ubuntu 18.04(Bionic Beaver)系统。
附加解决方案:
在某些情况下,您必须回显多行长内容(例如代码/配置)
例如:
echo -eprintf可能有一些限制
echo -e
您可以使用一些特殊的char作为占位符作为换行符(例如~),并在使用tr创建文件后替换它:
~
tr
echo ${content} | tr '~' '\n' > $targetFile
它需要调用另一个程序(tr),这应该没问题,IMO。
只需输入
换一条新线路
如果你正在编写脚本,并且会多次将换行符作为其他消息的一部分,一个很好的跨平台解决方案是将文字换行符放入变量中,如下所示:
newline='' echo "first line$newlinesecond line"echo "Error: example error message n${newline}${usage}" >&2 #requires usage to be defined
我只是使用回声没有任何参数:
echo "Hello"echoecho "World"
这让我在那里……
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]
要使用echo打印新行,请使用:
或
echo -e '\n'
仅针对提出的问题(不是特殊字符等),仅将双引号更改为单引号。
echo -e 'Hello,\nWorld!'
结果在:
Hello,World!
使用jq:
$ jq -nr '"Hello,\nWorld"'Hello,World