unix 为什么echo -n不能在Mac上的shell中工作?

u5rb5r59  于 8个月前  发布在  Unix
关注(0)|答案(2)|浏览(101)

echo的手册页说:

-n    Do not print the trailing newline character.  This may also be
       achieved by appending `\c' to the end of the string, as is done by
       iBCS2 compatible systems.  Note that this option as well as the
       effect of `\c' are implementation-defined in IEEE Std 1003.1-2001
       (``POSIX.1'') as amended by Cor. 1-2002.  Applications aiming for
       maximum portability are strongly encouraged to use printf(1) to
       suppress the newline character.

但是,这似乎在Mac上的sh中不起作用:

sh-3.2$ echo $0
/bin/sh
sh-3.2$ which echo
/bin/echo
sh-3.2$ echo -n foo
-n foo

它在bash中正常工作:

bash-3.2$ echo $0
bash
bash-3.2$ which echo
/bin/echo
bash-3.2$ echo -n foo
foobash-3.2

FWIW这似乎只发生在Mac上,在Linux上它工作正常:

$ echo $0
sh
$ echo -n foo
foo$
iyzzxitl

iyzzxitl1#

-nechobash扩展。在3.2版(随macOS提供)中,bash在作为sh调用时不支持该扩展。从4.0版开始(您的Linux机器上可能有某些版本),bash * 在作为sh调用时会 * 荣誉-n
更新:xpg_echo选项确定bash的内置echo是否符合POSIX。在bash 3.2(或至少是macOS 3.2版本)中,此选项默认为on;在bash 4.x中,它默认为off。

% sh -c 'shopt xpg_echo'
xpg_echo        on
% ./sh -c 'shopt xpg_echo'
xpg_echo        off

./sh/usr/local/bin/bash的符号链接,/usr/local/bin/bash是我机器上bash 4.4的本地安装。

px9o7tmv

px9o7tmv2#

echo上的-n选项在我的Mac(Big Sur)上使用zsh支持。

% echo Hello World
Hello World
% echo -n Hello World
Hello World**%**
%

粗体的百分比符号是因为对于部分行,zsh会转到下一行,以避免被提示符覆盖。
请访问https://zsh.sourceforge.io/Doc/Release/Options.html#Prompting
默认情况下,您将在部分行的末尾看到一个inverse+粗体字符:“%”表示普通用户,“#”表示root用户。

相关问题