Bash中的Echo newline打印文字\ n

时间:2011-12-11 21:01:55

标签: bash echo newline

在Bash中,试过这个:

echo -e "hello\nworld"

但它不打印换行符,只有\n。如何让它打印换行符?

我正在使用Ubuntu 11.04。

25 个答案:

答案 0 :(得分:2418)

您可以改为使用printf

printf "hello\nworld\n"

printf的行为比echo更一致。 echo的行为在不同版本之间差异很大。

答案 1 :(得分:1486)

你确定你在狂欢吗?这三种方式对我有用:

echo -e "Hello\nworld"
echo -e 'Hello\nworld'
echo Hello$'\n'world

答案 2 :(得分:504)

echo $'hello\nworld'

打印

hello
world

$''字符串使用ANSI C Quoting

  

$'string'形式的单词是专门处理的。单词扩展为 string ,替换为ANSI C标准指定的反斜杠转义字符。

答案 3 :(得分:116)

您可以随时echo ""

e.g。

echo "Hello"
echo ""
echo "World"

答案 4 :(得分:39)

如果有人发现自己在墙上撞击试图弄清楚为什么同事的剧本不会打印换行符,请注意这一点 - >

#!/bin/bash
function GET_RECORDS()
{
   echo -e "starting\n the process";
}

echo $(GET_RECORDS);

如上所述,该方法的实际运行本身可以包含在回声中,该回声取代可能在该方法本身中的任何回声。显然我为了简洁而淡化了它,发现它并不容易!

然后你可以告诉你的同志,执行功能的更好方法就是这样:

#!/bin/bash
function GET_RECORDS()
{
   echo -e "starting\n the process";
}

GET_RECORDS;

答案 5 :(得分:33)

尝试

echo -e "hello\nworld"
hello
world

在纳米编辑中为我工作。

答案 6 :(得分:20)

这对Raspbian来说很有用,

echo -e "hello\\nworld"

答案 7 :(得分:15)

str='hello\nworld'
$ echo | sed "i$str"
hello
world

答案 8 :(得分:15)

POSIX 7 on echo

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

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

  

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

除非您有可选的XSI扩展名。

所以请改用printf

  

格式操作数应用作XBD文件格式表示法[...]

中描述的格式字符串

File Format Notation

  

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

另请注意,Ubuntu 15.10和大多数发行版都将echo实现为:

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

可能导致一些混乱。

答案 9 :(得分:9)

它在CentOS中对我有用:

echo -e ""hello\nworld""

答案 10 :(得分:4)

对于那些没有使用这些解决方案的人来说,还有一个条目,需要从他们的函数中获取返回值:

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)

希望它可以帮助有类似问题的人。

答案 11 :(得分:4)

您也可以这样做:

echo "hello
world"

这既可以在脚本中使用,也可以在命令行中使用。
在命令行中,按 Shift + Enter 在字符串内进行换行。

这适用于我的macOS和Ubuntu 18.04

答案 12 :(得分:4)

我只使用echo no arguments

echo "Hello"
echo
echo "World"

答案 13 :(得分:3)

我的剧本:

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"

只需按Enter键即可插入该跳转。现在输出是:

WARNING : 2 WARNINGS FOUND:
Warning, found the following local orphaned signature file:

答案 14 :(得分:3)

这可以更好地完成

x="\n"
echo -ne $x

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

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

答案 15 :(得分:2)

你也可以使用echo with braces,

$ (echo hello; echo world)
hello
world

答案 16 :(得分:1)

bash 4.4中添加了一个 new parameter expansion,用于解释转义序列:

  

${parameter@operator} - E operator

     

扩展是一个字符串,它是带有   反斜杠转义序列与$'…'引号一样扩展   机制。

$ foo='hello\nworld'
$ echo "${foo@E}"
hello
world

答案 17 :(得分:1)

这可能不适用于您的情况,但过去曾让我感到困惑:

错误

在 Bash 中编写 "hello\nworld" 会得到一个包含换行符的字符串,而 echo -e 会打印出该字符串。

对了

写作 $'hello\nworld'

"hello
world"

为您提供一个包含换行符的字符串,而普通的 echo 会打印出该字符串。这很好,因为正如您所见,echo -e 并不总是受支持。

答案 18 :(得分:0)

有时您可以传递由空格分隔的多个字符串,它将被解释为#!/bin/bash notify-send 'notification success' 'another line' 'time now '`date +"%s"`

例如,当使用shell脚本进行多行通知时:

DB_SOCKET= /path/to/socket

答案 19 :(得分:0)

只需键入

  

回声

换行;)

答案 20 :(得分:0)

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

newline='
'

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

答案 21 :(得分:0)

在bash配置文件(MacOx,iTerm)中用作别名时,我必须用双引号将文本引起来。

alias helloworld="echo -e \"hello \n world\""

答案 22 :(得分:0)

这把我带到那里....

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]

答案 23 :(得分:-1)

在某些情况下,您必须使用一些env var修饰来回显较长的内容(例如代码),并希望使其变得简单。

echo -eprintf可能有一些限制

您可以使用一些特殊的char作为换行符的占位符(例如~

并尝试:

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

它需要调用另一个应该是IMO的程序(tr)。

答案 24 :(得分:-1)

带有cat的Heredoc也可以打印出所需的结果。

cat <<END
hello 
world
END