因此,您可以对stdout
写一个反斜杠
zsh$ echo \\
\
您会认为要输出2个反斜杠,需要运行以下命令:
zsh$ echo \\\\
\
错误,您需要6或8:
zsh$ echo \\\\\\
\\
zsh$ echo \\\\\\\\
\\
为什么在地球上我需要8个反斜杠?
不同外壳中的行为:
ksh$ echo \\\\
\\
zsh$ echo \\\\
\
bash$ echo \\\\
\\
sh$ echo \\\\
\
csh$ echo \\\\
\\
答案 0 :(得分:4)
您可能已经习惯了bash
的内置echo
,而 not 不会执行转义序列的扩展。 POSIX echo
是 。 zsh
遵循POSIX规范,因此当您编写echo \\\\\\
时,会发生以下情况。
\\\\\\
减少为\\\
;每个转义的\
都会变成文字\
。echo
接收它收到的三个\
,并将第一个\\
替换为\
。其余的\
之前没有任何内容,因此将按字面意义处理。\
的输出。使用echo \\\\\\\\
,会发生以下情况。
\\\\\\\\
变成\\\\
,因为在引用删除后,每对反斜杠都变成一个\
。echo
取4个反斜杠,并将第一个\\
替换为\
,将 second \\
替换为\
好吧,因为这一次它收到了两个匹配的对。\
。 bash
可能从ksh
继承了其非POSIX规范,根据定义,sh
是一个POSIX规范的shell,最好不要考虑csh
是什么做。
答案 1 :(得分:0)
不仅zsh是终端的默认行为,反斜杠(\
)是一个特殊字符,用于告诉bash脚本您要换行中的其他参数/文本,因此要避免换行,您需要添加另一个反斜杠用于转义特殊字符,因为反斜杠也用于转义特殊字符