Bash中的Echo newline打印文字\ n

问题描述 投票:1991回答:19

在Bash中,试过这个:

echo -e "hello\nworld"

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

我正在使用Ubuntu 11.04。

bash echo newline
19个回答
2470
投票

您可以使用printf代替:

printf "hello\nworld\n"

printfecho具有更一致的行为。 echo的行为在不同版本之间差异很大。


9
投票

它适用于CentOS:

echo -e ""hello\nworld""

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)

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


4
投票

你也可以这样做:

echo "hello
world"

这适用于脚本和命令行。 在命令行中,按Shift + Enter在字符串内执行换行符。

这适用于我的macOS和我的Ubuntu 18.04


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:

3
投票

这可以更好地完成

x="\n"
echo -ne $x

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

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


2
投票

你也可以使用带括号的回声,

$ (echo hello; echo world)
hello
world

2
投票

parameter expansion中添加了一个新的bash 4.4来解释转义序列:

${parameter@operator} - E operator

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

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

0
投票

有时您可以传递由空格分隔的多个字符串,它将被解释为\n

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

#!/bin/bash
notify-send 'notification success' 'another line' 'time now '`date +"%s"`

0
投票

只需输入

回声

得到一个新的一行;)


0
投票

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

newline='
'

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

1511
投票

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

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

-1
投票

在某些情况下,您必须使用一些env var concatination来回显长内容(例如代码),并希望简化它。

echo -eprintf可能有一些限制

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

试试这个:

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

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


509
投票
echo $'hello\nworld'

版画

hello
world

$''字符串使用ANSI C Quoting

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


119
投票

你总是可以做echo ""

EG

echo "Hello"
echo ""
echo "World"

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;

33
投票

尝试

echo -e "hello\nworld"
hello
world

纳米编辑为我工作。


21
投票

这对Raspbian来说很有用,

echo -e "hello\\nworld"

17
投票

POSIX 7回音

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

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

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

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

所以我建议您应该使用printf,这是明确指定的:

格式操作数应用作XBD文件格式表示法中描述的格式字符串[...]

File Format Notation

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

还要记住,Ubuntu 15.10和大多数发行版都将echo实现为:

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

这可能会导致一些混乱。


15
投票
str='hello\nworld'
$ echo | sed "i$str"
hello
world
© www.soinside.com 2019 - 2024. All rights reserved.