我前段时间已经注意到,在zsh中你可以通过在bash中键入\\来获得\。
> echo \\
\
但是,在zsh中有4个反冲的奇怪现象。
bash$ echo \\\\
\\
zsh> echo \\\\
\
你知道为什么吗?这是一个错误吗?
答案 0 :(得分:4)
不,这不是错误。这只是这些shell中的echo实现 有一个不同的默认设置来解释反斜杠序列。
在任一shell中,命令行解析器将删除一层反斜杠
将4个反斜杠转换为2.然后将该参数传递给echo
内置命令。当echo解释反斜杠序列时,反斜杠为1
如果反射未执行反斜杠解释,则该序列的输出
将输出2个反斜杠。
在任一shell的echo
实现中,都可以使用-e
或-E
选项
分别启用或禁用反斜杠解释。所以以下
将在任一shell中生成相同的输出:
echo -e \\\\
echo -E \\\\
两个shell也有shell级别的选项来改变它的默认行为
他们的回音命令。在zsh中,可以使用setopt BSD_echo
更改默认值,
要更改bash中的默认值,命令为shopt -s xpg_echo
。
如果您正在尝试编写可移植的shell脚本,那么最好的服务方式就是
完全避免使用回声;它是最便携的命令之一
周围。请改用printf
。