在寻找真相时,echo
我发现了这个页面:
https://pubs.opengroup.org/onlinepubs/9699919799/utilities/echo.html
它通常是此站点https://pubs.opengroup.org/onlinepubs/9699919799/上的 HTML 框架(您可以在其中搜索“echo”)。
这声称是 POSIX,但我看不到,而是-n
看到\c
了!
我发现了什么?
GracefulRestart指出它可以/bin/echo
识别\c
,但默认情况下它不会这样做:我必须这样做echo -e
才能\c
被识别。
您已找到由 The Open Group 发布的 IEEE 1003.1-2017,又名Single Unix Specification 。
有关更多信息,请参阅“ POSIX 到底是什么? ”、“ POSIX、单一 UNIX 规范和开放组基本规范之间的区别? ”,以及所有相关的问题和答案。
就在
-n
那里,以粗体显示,因此很难错过。是的,\c
是标准的。的行为变化
echo
是臭名昭著的。你不应该感到惊讶,/bin/echo
它与内置的 shell 不同echo
,并且一个需要一个-e
where 另一个不需要。甚至没有那么简单。有关详细说明,请参阅“为什么 printf 比 echo 更好? ”。
对于鲜为人知
printf
的.\c
_如果您使用的是带有 UNIX 品牌的 POSIX 认证平台,则默认情况下会
echo
处理\c
。这适用于 Solaris、AIX、HP-UX 和 Apple。
Apple 甚至使用
bash
来支持这种回显行为,但您需要一个特定的编译选项才能bash
默认兼容。此编译选项用于bash
MacOS 和 Solaris。因此,当人们意识到bash
在 POSIX 认证平台上的行为不同时,他们可能会感到困惑,记住:
GNU
读 GNU is not UNIX.... 许多 GNU 工具默认不符合 POSIX 或不符合 POSIX。因此,当您不在经过认证的平台上时要小心。顺便说一句:即使您不支持小型嵌入式平台,您也可以获得 POSIX 品牌
echo \c
,但对于UNIX
品牌,您需要支持POSIX 的所有XSI
扩展。Linux 不支持大多数XSI
扩展。许多Linux 发行版例如dash
用作默认shell 和dash
id 绝对不兼容,例如因为它不支持多字节字符。