6

echo -ne "hello\n"使用 bash 和破折号的相同命令,我得到了不同的行为。见下文 :

$ bash -c 'echo -ne "hello\n"'
hello
$ dash -c 'echo -ne "hello\n"'
-ne hello

这是为什么 ?完全看不懂……</p>

我的系统:

$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 12.04.5 LTS
Release:    12.04
Codename:   precise
4

2 回答 2

10

POSIX 规范echo不支持任何参数。在这里看到它。

虽然规范提到-n它这样做是说它不是一个选项,并且是一个实现定义的案例或被视为一个字符串。

dash正是这样做的。

bash另一方面,在许多方面都有不合格的行为。

这就是为什么echo通常不鼓励使用的原因,而倾向于使用printf具有更好的规范和更好的可移植行为的使用。

于 2015-11-18T16:17:04.130 回答
2

虽然默认情况下echo实现bash不符合 POSIX 和 Unix,但您可以在运行时或编译时更改其行为。

在运行时,xpg_echo在 POSIX 模式下,bash echo变得一致:

$ env BASHOPTS=xpg_echo SHELLOPTS=posix bash -c 'echo -ne "hello\n"'
-ne hello

或者:

$ env BASHOPTS=xpg_echo POSIXLY_CORRECT= bash -c 'echo -ne "hello\n"'
-ne hello

在编译时,您可以将--enable-xpg-echo-default--enable-strict-posix-default选项传递给configure脚本。

于 2015-11-18T16:33:25.750 回答