Bash 中的 Echo 换行符输出文字 \ n

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

echo -e "hello\nworld"

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

我正在使用 Ubuntu 11.04。

答案

您可以改用printf

printf "hello\nworld\n"

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

你确定你在狂欢吗?可以通过以下三种方式为我工作:

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

版画

hello
world

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

$' <i>string</i> '形式的单词会被特殊对待。该单词扩展为string ,并按 ANSI C 标准的规定替换了反斜杠转义的字符。

您总是可以echo ""

例如

echo "Hello"
echo ""
echo "World"

尝试

echo -e "hello\nworld"
hello
world

nano编辑器中为我工作。

从手册页:

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

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

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

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

可能会导致一些混乱。

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

只需输入

echo

换行