带有 -e 选项的 Unix echo 命令

带有 -e 选项的 Unix echo 命令

我正在阅读有关echoUNIX 中的命令的信息,我发现了-e用于启用反斜杠转义解释的选项,问题是这些反斜杠转义序列之一是 \\ ,但是当我使用这两个命令时:

echo "hello\\\world"

echo -e "hello\\\world"

我得到相同的输出: hello\\world ,那么有什么区别呢? |

答案1

默认是扩展转义序列,-e 选项是非标准的。

如果您的 echo 实现在 echo 输出中不包含 -e,则它是不合规的。

这里的问题是,有些实现只遵循最低的 POSIX 要求,而忽略了一个事实,即允许称为UNIX兼容的平台需要实现对 POSIXXSI增强功能的支持。

顺便说一句:MacOS X 和 Solaris 上的 bash 被编译为始终扩展转义序列。默认编译变体中的 Bash 不符合 POSIX XSI。

POSIX 兼容 shell(如 ksh93、bosh 或 dash)默认根据需要扩展转义序列。

如果您想检查行为,那么测试字符串不是一个好主意。更好的测试是:

echo '\tfoo'

并检查foo输出中是否以制表符开头。

您可能遇到问题的原因是您使用了 shell foo\\bar,并且 shell 已经处理双引号字符串中的反斜杠。如果您想检查echo行为,则需要使用单引号字符串作为参数。

相关内容