在Bash中,试过这个:
echo -e "hello\nworld"
但它不打印换行,只有\n
。如何让它打印换行符?
我正在使用Ubuntu 11.04。
您可以使用printf
代替:
printf "hello\nworld\n"
printf
比echo
具有更一致的行为。 echo
的行为在不同版本之间差异很大。
它适用于CentOS:
echo -e ""hello\nworld""
对于那些没有使用任何这些解决方案的人来说,还有一个条目,需要从他们的函数中获取返回值:
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)
希望它可以帮助有类似问题的人。
你也可以这样做:
echo "hello
world"
这适用于脚本和命令行。 在命令行中,按Shift + Enter在字符串内执行换行符。
这适用于我的macOS和我的Ubuntu 18.04
我的剧本:
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:
这可以更好地完成
x="\n"
echo -ne $x
-e选项将解释转义序列的后退 -n选项将删除输出中的尾随换行符
PS:命令echo的作用总是在输出中包含一个尾随的换行符,因此需要-n来关闭该东西(并使其不那么混乱)
你也可以使用带括号的回声,
$ (echo hello; echo world)
hello
world
在parameter expansion中添加了一个新的bash 4.4
来解释转义序列:
${parameter@operator} - E operator
扩展是一个字符串,它是带有反斜杠转义序列的参数值,与
$'…'
引用机制一样。
$ foo='hello\nworld'
$ echo "${foo@E}"
hello
world
有时您可以传递由空格分隔的多个字符串,它将被解释为\n
。
例如,当使用shell脚本进行多行通知时:
#!/bin/bash
notify-send 'notification success' 'another line' 'time now '`date +"%s"`
只需输入
回声
得到一个新的一行;)
如果您正在编写脚本并且将多次作为其他消息的一部分回显换行,那么一个很好的跨平台解决方案是将字面换行放在变量中,如下所示:
newline='
'
echo "first line$newlinesecond line"
echo "Error: example error message n${newline}${usage}" >&2 #requires usage to be defined
你确定你在bash吗?这三种方式对我有用:
echo -e "Hello\nworld"
echo -e 'Hello\nworld'
echo Hello$'\n'world
在某些情况下,您必须使用一些env var concatination来回显长内容(例如代码),并希望简化它。
echo -e
,printf
可能有一些限制
您可以使用一些特殊字符作为换行符的占位符(例如~
)
试试这个:
echo ${content} | tr '~' '\n' > $targetFile
它需要调用另一个程序(tr
),这应该是很好的IMO。
echo $'hello\nworld'
版画
hello
world
$''
字符串使用ANSI C Quoting:
$'string'
形式的单词是专门处理的。单词扩展为字符串,替换为ANSI C标准指定的反斜杠转义字符。
你总是可以做echo ""
。
EG
echo "Hello"
echo ""
echo "World"
如果有人发现自己在墙上撞墙试图弄清楚为什么同事的剧本不会打印换行符,那么请注意这一点 - >
#!/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;
尝试
echo -e "hello\nworld"
hello
world
纳米编辑为我工作。
这对Raspbian来说很有用,
echo -e "hello\\nworld"
POSIX 7回音
http://pubs.opengroup.org/onlinepubs/9699919799/utilities/echo.html
-e
未定义,反斜杠是实现定义的:
如果第一个操作数是-n,或者如果任何操作数包含<反斜杠>字符,则结果是实现定义的。
除非您有可选的XSI扩展名。
所以我建议您应该使用printf
,这是明确指定的:
格式操作数应用作XBD文件格式表示法中描述的格式字符串[...]
\ n <新行>将打印位置移动到下一行的开头。
还要记住,Ubuntu 15.10和大多数发行版都将echo
实现为:
help echo
which echo
这可能会导致一些混乱。
str='hello\nworld'
$ echo | sed "i$str"
hello
world