如何在Linux shell脚本中插入新行?

146

我想在多个 echo 语句之间插入新的一行。我已经尝试了 echo "hello\n",但是它并没有起作用。它会打印出 \n。我想要以下所示的期望输出:

Create the snapshots

Snapshot created

7
我认为你想要这个。解释得非常清楚。这是一个关于在Bash中打印换行符的问题,其中提供了一个使用echo命令的解决方案。该解决方案将字符串"-e"传递给echo命令,并在字符串中使用"\n"表示换行符。 - wolv3r1n3
你可以使用printf代替echo: printf "你好\n" - hassanzadeh.sd
4个回答

244

echo语句之间插入新行的最简单方法是插入一个没有参数的echo,例如:

echo Create the snapshots
echo
echo Snapshot created

也就是说,没有任何参数的echo指令会打印出一行空白。

另一个选择是使用单个带有-e标志和嵌入换行符\necho语句:

echo -e "Create the snapshots\n\nSnapshot created"

然而,这种方法并不具备可移植性,因为-e标志在所有系统中的工作表现并不一致。如果你真的想要这样做,更好的方法是使用printf

printf "Create the snapshots\n\nSnapshot created\n"

这在许多系统中更可靠,尽管它不符合 POSIX 标准。请注意,您必须手动添加一个 \n 在结尾处,因为 printf 不会像 echo 一样自动附加换行符。


1
但是如果要使用一个echo命令,只用\n,那么对于以下代码会有什么等效的输出呢?echo "我想在一行上" echo "我想在另一行上"这样当你有很长的句子时,你可以在bash中换行(至少使用3或4个bash行),我来到这里希望找到答案。例如,详细说明您的最终答案如何使用一个echo命令分成多行,如果我想在我的bash文件中在“Snapshot created”处截断它并将其作为新的bash行,而不添加echo命令怎么办?我认为可以使用加号+来实现。 - blamb
1
@blamb,你可以使用\在行末换行。但这与此处所问的问题非常不同。 - janos

85

使用这个echo语句

 echo -e "Hai\nHello\nTesting\n"

输出结果为

Hai
Hello
Testing

1
感谢使用echo命令的参数。一行命令很好。 - haxpor
3
这应该是被认可的答案。它不需要多次重复使用 echo 来在多行中打印。 - NurShomik

28
echo $'Create the snapshots\nSnapshot created\n'

2
感谢@ohad-cohen。这似乎是唯一可以重定向到文件的解决方案。 - icasimpan
1
这是一个很酷的技巧。你知道为什么它有效吗? - NurShomik
我不记得我最初在哪里看到这个,但我相信它是通过bash变量机制完成的。 - Ohad Cohen

17
你可以使用 printf(1) 命令,例如:
printf "Hello times %d\nHere\n" $[2+3] 

printf 命令可能会接受参数,并需要一个与标准的 C printf(3) 函数类似(但并非完全相同)的格式控制字符串...


printf在shell中可用吗? - user3086014
printf 命令和 printf 库函数相似,但不完全相同。 - Basile Starynkevitch

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接