在Bash中,试过这个:
echo -e "hello\nworld"
但它不打印换行符,只有 \n . 如何让它打印换行符?
\n
我正在使用Ubuntu 11.04 .
你确定你在bash吗?这三种方式对我有用:
echo -e "Hello\nworld" echo -e 'Hello\nworld' echo Hello$'\n'world
有时您可以传递由空格分隔的多个字符串,它将被解释为 \n .
例如,当使用shell脚本进行多行通知时:
#!/bin/bash notify-send 'notification success' 'another line' 'time now '`date +"%s"`
我的剧本:
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:
在 bash 4.4 中添加了一个新的parameter expansion来解释转义序列:
bash 4.4
$ {parameter @ operator} - E运算符扩展是一个字符串,它是带有反斜杠转义序列的参数值,与$'...'引用机制一样 .
$ foo='hello\nworld' $ echo "${foo@E}" hello world
尝试
echo -e "hello\nworld" hello world
纳米编辑为我工作 .
你也可以使用带括号的回声,
$ (echo hello; echo world) hello world
POSIX 7 on echo
http://pubs.opengroup.org/onlinepubs/9699919799/utilities/echo.html
-e 未定义,反斜杠是实现定义的:
-e
如果第一个操作数是-n,或者如果任何操作数包含<反斜杠>字符,则结果是实现定义的 .
除非您有可选的XSI扩展名 .
所以请改用printf:
格式操作数应用作XBD文件格式表示法中描述的格式字符串[...]
File Format Notation:
\ n <换行>将打印位置移动到下一行的开头 .
还要记住,Ubuntu 15.10和大多数发行版都将 echo 实现为:
echo
内置Bash: help echo
help echo
独立可执行文件: which echo
which echo
这可能会导致一些混乱 .
echo $'hello\nworld'
版画
hello world
$'' 字符串使用ANSI C Quoting:
$''
$'string'形式的单词被特别处理 . 单词扩展为字符串,替换为ANSI C标准指定的反斜杠转义字符 .
它适用于CentOS:
echo -e ""hello\nworld""
str='hello\nworld' $ echo | sed "i$str" hello world
你总是可以做 echo "" .
echo ""
例如
echo "Hello" echo "" echo "World"
这对我来说是用不饱和的,
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)
希望它可以帮助有类似问题的人 .
如果有人发现自己在墙上撞击试图弄清楚为什么同事的剧本不会打印换行符,那么请注意这一点 - >
#!/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;
您可以使用 printf 代替:
printf
printf "hello\nworld\n"
printf 具有比 echo 更一致的行为 . echo 的行为在不同版本之间差异很大 .
这可以更好地完成
x="\n" echo -ne $x
-e选项将解释转义序列的后退-n选项将删除输出中的尾部换行符
PS:命令echo的作用总是在输出中包含一个尾随的换行符,因此需要-n来关闭该东西(并使其不那么混乱)
你也可以这样做:
echo "hello world"
这适用于我的macOS .
17 回答
你确定你在bash吗?这三种方式对我有用:
有时您可以传递由空格分隔的多个字符串,它将被解释为
\n
.例如,当使用shell脚本进行多行通知时:
我的剧本:
输出:
在我的bash脚本中,我一直生气,直到我刚试过:
只需按Enter键即可插入该跳转 . 现在的输出是:
在
bash 4.4
中添加了一个新的parameter expansion来解释转义序列:尝试
纳米编辑为我工作 .
你也可以使用带括号的回声,
POSIX 7 on echo
http://pubs.opengroup.org/onlinepubs/9699919799/utilities/echo.html
-e
未定义,反斜杠是实现定义的:除非您有可选的XSI扩展名 .
所以请改用printf:
File Format Notation:
还要记住,Ubuntu 15.10和大多数发行版都将
echo
实现为:内置Bash:
help echo
独立可执行文件:
which echo
这可能会导致一些混乱 .
版画
$''
字符串使用ANSI C Quoting:它适用于CentOS:
你总是可以做
echo ""
.例如
这对我来说是用不饱和的,
echo -e "hello\\nworld"
对于那些没有使用任何这些解决方案的人来说,还有一个条目,需要从他们的函数中获取返回值:
只有这个技巧在我正在使用这个bash的linux中工作:
希望它可以帮助有类似问题的人 .
如果有人发现自己在墙上撞击试图弄清楚为什么同事的剧本不会打印换行符,那么请注意这一点 - >
如上所述,该方法的实际运行本身可以包裹在回声中,该回声取代可能在该方法本身中的任何回声 . 显然我为了简洁而淡化了它,发现它并不容易!
然后,您可以告知您的同志,执行函数的更好方法是这样的:
您可以使用
printf
代替:printf
具有比echo
更一致的行为 .echo
的行为在不同版本之间差异很大 .这可以更好地完成
-e选项将解释转义序列的后退
-n选项将删除输出中的尾部换行符
PS:命令echo的作用总是在输出中包含一个尾随的换行符,因此需要-n来关闭该东西(并使其不那么混乱)
你也可以这样做:
这适用于我的macOS .