在Bash回声换行打印文字\ n
在Bash中,试过这个:
echo -e "hello\nworld"
但它不打印换行符,只是\n
。 我怎样才能打印换行符?
我使用Ubuntu 11.04。
你可以用printf
代替:
printf "hello\nworld\n"
printf
比echo
有更一致的行为。 echo
的行为在不同的版本之间差别很大。
你确定你在bash吗? 对我来说,所有这三种方式:
echo -e "Hello\nworld" echo -e 'Hello\nworld' echo Hello$'\n'world
echo $'hello\nworld'
版画
hello world
$''
string使用ANSI C引用 :
$' string '
forms的单词被专门处理。 字扩展为string ,反斜杠转义字符被ANSI C标准指定。
你总是可以做echo ""
。
例如
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;
这对我来说在raspbian,
echo -e "hello\\nworld"
str='hello\nworld' $ echo | sed "i$str" hello world
回声POSIX 7
http://pubs.opengroup.org/onlinepubs/9699919799/utilities/echo.html
-e
未定义,反斜杠是实现定义的:
如果第一个操作数是-n,或者任何操作数包含一个<反斜杠>字符,则结果是实现定义的。
除非你有一个可选的XSI扩展。
所以用printf
来代替:
格式操作数应当用作XBD文件格式符号[…]中描述的格式string,
文件格式符号 :
\ n <新行>将打印位置移动到下一行的开头。
另外请记住,Ubuntu 15.10和大多数发行版实现echo
为:
- 内置Bash:
help echo
- 一个独立的可执行文件:
which echo
这可能会导致一些混乱。
对于那些没有使用任何这些解决scheme的人来说,还有一个条目需要从他们的函数中获得一个返回值:
function foo() { local v="Dimi"; local s=""; ..... s+="Some message here $v $1\n" ..... echo $s } r=$(foo "my message"); echo -e $r;
只有这个技巧在linux上工作,我正在使用这个bash:
GNU bash, version 2.2.25(1)-release (x86_64-redhat-linux-gnu)
希望它可以帮助有类似问题的人。
我的脚本:
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"
只要按下input你想要插入的跳跃。 现在输出是:
WARNING : 2 WARNINGS FOUND: Warning, found the following local orphaned signature file:
你也可以用大括号echo,
$ (echo hello; echo world) hello world
这可以做得更好
x="\n" echo -ne $x
-e选项将解释转义序列的反斜杠
-n选项将删除输出中的尾随换行符
PS:命令echo会在输出中总是包含一个尾随的换行符,所以-n被要求关掉这个东西(并且不要混淆)