我正在阅读有关echo
UNIX 中的命令的信息,我发现了-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
行为,则需要使用单引号字符串作为参数。