在Bash中,尝试了以下操作:

echo -e "hello\nworld"

但是它不打印换行符,仅打印\\n 如何使其打印换行符?

我正在使用Ubuntu 11.04。

===============>>#1 票数:2646 已采纳

您可以改用printf

printf "hello\nworld\n"

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

===============>>#2 票数:1589

你确定你在狂欢吗? 为我工作,所有三种方式:

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

===============>>#3 票数:551

echo $'hello\nworld'

版画

hello
world

$''字符串使用ANSI C引用

' are treated specially. $' '形式的单词会被特殊对待。 , with backslash-escaped characters replaced as specified by the ANSI C standard. 该单词扩展为 ,并按ANSI C标准的规定替换了反斜杠转义的字符。

===============>>#4 票数:129

您总是可以echo ""

例如

echo "Hello"
echo ""
echo "World"

===============>>#5 票数:45

尝试

echo -e "hello\nworld"
hello
world

在nano编辑器中为我工作。

从手册页:

-e启用反斜杠转义的解释

===============>>#6 票数:40

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

#!/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;

===============>>#7 票数:23

这在Raspbian中对我有效,

echo -e "hello\\nworld"

===============>>#8 票数:21

POSIX 7回显

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

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

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

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

因此,我建议您改用printf ,它已被明确指定:

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

文件格式符号

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

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

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

可能会导致一些混乱。

===============>>#9 票数:16

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

===============>>#10 票数:9

它在CentOS中对我有用:

echo -e ""hello\nworld""

===============>>#11 票数:7

只需输入

echo

换行

===============>>#12 票数:6

您也可以:

echo "hello
world"

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

这适用于我的macOS和Ubuntu 18.04

===============>>#13 票数: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)

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

===============>>#14 票数:4

我的剧本:

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:

===============>>#15 票数:3

最好这样做

x="\n"
echo -ne $x

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

PS:命令回声的效果是始终在输出中包含尾随换行符,因此需要-n来关闭该功能(并减少混乱)

===============>>#16 票数:2

您还可以将回声与大括号一起使用,

$ (echo hello; echo world)
hello
world

===============>>#17 票数:2

bash 4.4中添加了一个新的 参数扩展 ,用于解释转义序列:

${parameter@operator} - E operator

扩展名是一个字符串,它是反斜杠转义序列的参数值,其扩展程度与$'…'引用机制相同。

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

===============>>#18 票数:1

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

newline='
'

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

===============>>#19 票数:0

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

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

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

===============>>#20 票数:0

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

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

===============>>#21 票数:-2

附加解决方案:

在某些情况下,您必须回显长内容的多行(例如代码/配置)

例如 :

  • 一个Bash脚本来生成代码/配置

echo -eprintf可能有一些限制

您可以使用一些特殊的char作为占位符作为换行符(例如~ ),并在使用tr创建文件后将其替换。

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

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

  ask by Sergey translate from so

未解决问题?本站智能推荐: