Zsh逃避反斜杠

时间:2013-05-08 00:11:29

标签: zsh

我前段时间已经注意到,在zsh中你可以通过在bash中键入\\来获得\。

> echo \\
\

但是,在zsh中有4个反冲的奇怪现象。

bash$ echo \\\\
\\

zsh> echo \\\\
\
你知道为什么吗?这是一个错误吗?

1 个答案:

答案 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