在寻找简单的事实时,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。因此,当人们意识到bash
POSIX 认证平台上的行为不同时,他们可能会感到困惑,
请记住:GNU
GNU 不是 UNIX...许多 GNU 工具不兼容 POSIX 或默认不兼容 POSIX。因此,当您不在经过认证的平台上时要小心。
顺便说一句:即使您不支持,您也可能会获得小型嵌入式平台的 POSIX 品牌echo \c
,但对于UNIX
品牌,您需要支持全部 XSI
POSIX 的扩展。 Linux 不支持大多数XSI
扩展。许多 Linux 发行版(例如)使用dash
默认 shell 和dash
id 绝对不兼容,例如因为它不支持多字节字符。