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$
2条答案
按热度按时间iyzzxitl1#
-n
是echo
的bash
扩展。在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
是/usr/local/bin/bash
的符号链接,/usr/local/bin/bash
是我机器上bash
4.4的本地安装。px9o7tmv2#
echo上的-n选项在我的Mac(Big Sur)上使用zsh支持。
粗体的百分比符号是因为对于部分行,zsh会转到下一行,以避免被提示符覆盖。
请访问https://zsh.sourceforge.io/Doc/Release/Options.html#Prompting
默认情况下,您将在部分行的末尾看到一个inverse+粗体字符:“%”表示普通用户,“#”表示root用户。