bash - shell字符串换行符 - ubuntu换行符




Echo换行符在Bash中打印文字\ n (10)

在Bash中,试过这个:

echo -e "hello\nworld"

但它不会打印换行符,只是\n 。 我怎样才能让它打印换行符?

我使用的是Ubuntu 11.04。


回声的POSIX 7

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

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

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

除非你有一个可选的XSI扩展。

所以使用printf代替:

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

文件格式符号

\ n <新行>将打印位置移动到下一行的开始位置。

另外请记住,Ubuntu 15.10和大多数发行版实现了echo

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

这可能会导致一些混淆。


为了避免有人发现自己为了找出同事的脚本不会打印换行符而试图找出自己的头靠在墙上,请注意这一点 - >

#!/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 "hello\nworld\n"

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


你总是可以做echo ""

例如

echo "Hello"
echo ""
echo "World"

对于那些没有使用这些解决方案的人来说,还有一个条目需要从他们的函数中获得返回值:

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 -e "hello\nworld"
hello
world

在nano编辑器中为我工作。


这到处工作吗?

echo "Hello
World"

这可以做得更好

x="\n"
echo -ne $x

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

PS:命令echo会在输出中总是包含一个尾随的换行符,所以-n需要关掉这个东西(并且使它不那么容易混淆)


echo $'hello\nworld'

版画

hello
world

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

特殊处理$' string '形式的单词。 该字扩展为字符串 ,反斜杠转义字符被替换为ANSI C标准指定的字符。


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




newline