这个 POSIX echo \c 是什么?

这个 POSIX echo \c 是什么?

在寻找简单的事实时,echo我发现了这个页面:

https://pubs.opengroup.org/onlinepubs/9699919799/utilities/echo.html

它通常是该网站上的 HTML 框架https://pubs.opengroup.org/onlinepubs/9699919799/(您可以在其中搜索“echo”)。

这声称是 POSIX,但我没有看到,-n而是看到了\c

我发现了什么?

优雅重启指出/bin/echo可以识别\c,但默认情况下它不会这样做:我必须做一些事情echo -e才能\c被识别。

答案1

您已找到 IEEE 1003.1-2017,又名单一 Unix 规范,由开放集团出版。

更多内容请参见“POSIX 到底是什么?“,”POSIX、单一 UNIX 规范和 Open Group 基本规范之间的区别?”,以及所有相关的问题和答案。

-n在那里,以粗体字显示,因此很难错过。是的,\c这是标准的。

行为的变化echo是众所周知的。您不应该感到惊讶,这/bin/echo与内置的 shell 不同echo,并且一个需要 ,而-e另一个则不需要。甚至还不是简单的。

有关详细说明,请参阅“为什么 printf 比 echo 更好?”。

对于 的鲜为人知的可变性printf,讽刺的是涉及完全相同的\c转义序列,请参阅“Bash printf 格式化不起作用”。

答案2

如果您使用的是具有 UNIX 品牌的 POSIX 认证平台,则默认echo进行处理。\c

这适用于 Solaris、AIX、HP-UX 和 Apple。

Apple 甚至使用bash支持这种回显行为,但您需要一个特定的编译选项才能bash默认兼容。此编译选项bash用于 MacOS 和 Solaris。因此,当人们意识到bashPOSIX 认证平台上的行为不同时,他们可能会感到困惑,

请记住:GNUGNU 不是 UNIX...许多 GNU 工具不兼容 POSIX 或默认不兼容 POSIX。因此,当您不在经过认证的平台上时要小心。

顺便说一句:即使您不支持,您也可能会获得小型嵌入式平台的 POSIX 品牌echo \c,但对于UNIX品牌,您需要支持全部 XSIPOSIX 的扩展。 Linux 不支持大多数XSI扩展。许多 Linux 发行版(例如)使用dash默认 shell 和dashid 绝对不兼容,例如因为它不支持多字节字符。

相关内容