题 Bash中的Echo newline打印文字\ n


在Bash中,试过这个:

echo -e "hello\nworld"

但它不会仅打印换行符 \n。如何让它打印换行符?

我正在使用Ubuntu 11.04。


1579
2017-12-11 21:01


起源


对于那些说“它对我有用”的人来说,回声的行为在不同版本之间变化很大。有些甚至会打印“-e”作为输出的一部分。如果你想要任何非常重要的行为的可预测行为,请改用printf(如@sth的回答)。 - Gordon Davisson
我无法得到 任何 这个答案中的建议有效,因为事实证明,我试图在一个函数中使用它 返回一个值,并且函数中的所有echo(和pr​​intf)消息都被附加到返回值 在单独剥离换行符之后。这是一个有关这方面的问题,答案非常彻底: stackoverflow.com/questions/27872069/... 这就像一个三小时的神秘之旅。 - aliteralmind
另外值得注意的是:在Unix和Linux Stack Exchange中 接受了答案 至 如何在使用echo时添加新行 - Graham Perrin
@GrahamPerrin,感谢链接到一个非常好的和详细的答案!我认为这比下面的答案更好。 - Konstantin
echo -ne“hello \ nworld”(你需要n标志来解释转义) - 但正如其他人所说,不同的echo命令可能会有不同的结果! - Konchog


答案:


你可以用 printf 代替:

printf "hello\nworld\n"

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


1946
2017-12-11 21:04



甚至 printf %"s\n" hello world  - 如果给出的参数太多,printf将重用该格式 - glenn jackman
OP询问回声,而不是printf;和@ choroba的答案如下,使用-e选项,完全填补了账单。 - JESii
@JESii:如果你的话适合 echo 恰好支持 -e 选项。 - sth
有些版本的 echo, -e 只是打印在输出本身,所以我认为这个答案完全有效 echo 这里不一致(除非我们谈论的是特定版本)。 - Tejas Manohar
如果printf可用,这是好的,但不像echo,有时printf不在发行版上。 - bigtunacan


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

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

1302
2017-12-11 21:04



-e flag为我做了,“能够解释反斜杠逃逸” - tandy
我认为 -e 所有* nix OS上都不存在param - kenorb
@kenorb:它存在于bash中。这是一个内置的。 - choroba
为什么第三个有效?没有$它返回“Hello n world” - Evan Donovan
如其他各种-e所述,它不适用于所有发行版和版本。在某些情况下,它会被忽略,而在其他情况下,它实际上会被打印出来。我不相信这为OP修好了所以不应该接受答案 - csga5000


echo $'hello\nworld'

版画

hello
world

$'' 字符串使用 ANSI C报价

形式的话 $'' 特别对待。这个词扩展到了 ,使用ANSI C标准指定的反斜杠转义字符替换。


424
2017-11-02 09:39



做这个 不 为任何人工作?让我们知道。 - Evgeni Sergeev
@EvgeniSergeev不确定你的意思,但它首先对我不起作用。这是因为我使用的是双引号,结果只能使用单引号!在Mac上的终端尝试。 - trss
字符串中的变量未被扩展的问题。 - willemdh


你可以随时做 echo ""

例如

echo "Hello"
echo ""
echo "World"

90
2018-02-28 22:14



echo "" 适合我,我认为这是打印新行的最简单形式,即使这不能直接回答问题。干杯。 - Mario Awad
我认为它不那么明显(因而可能更令人困惑) echo -en "\n"。 - DBedrenko
echo 足以获得一个空行 - ROMANIA_engineer
echo '' 什么不起作用 - Okneloper
@Okneloper对我来说很好。 - Matthew Read


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

#!/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
2017-08-08 20:15



确保使用引号包装变量,然后将其从方法中回显出来。 - ingyhere


尝试

echo -e "hello\nworld"
hello
world

纳米编辑为我工作。


22
2017-12-05 11:06





这对我来说是用不饱和的,

echo -e "hello\\nworld"


18
2018-04-19 19:05



也适用于Windows 7上的GitBash ;-) - Big Rich
单个反斜杠就足够了 - Felix D.
减去已经存在的答案。 - Piotr Dobrogost


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

14
2017-11-23 11:10



这实际上是一个很好的答案,因为它适用于字符串连接。大! - LavaScornedOven
为什么懒得调用第二个程序?并不是我们试图在bash中编写实时应用程序;)但这不是必需的。 - Felix D.
这真是一个很好的答案,无论如何都应该适用于所有地方。你救了我的朋友@alinsoar - Kashyap Kotak