因此,要为stdout编写反斜杠,您可以这样做
zsh$ echo \\
\您可能认为要输出2个反斜杠,需要运行以下命令:
zsh$ echo \\\\
\错误的,您需要6或8:
zsh$ echo \\\\\\
\\
zsh$ echo \\\\\\\\
\\,为什么我需要8个反斜杠?
在不同壳中的行为:
ksh$ echo \\\\
\\
zsh$ echo \\\\
\
bash$ echo \\\\
\\
sh$ echo \\\\
\
csh$ echo \\\\
\\

发布于 2019-06-02 15:07:52
您可能已经习惯了bash的内置echo,它不执行转义序列的扩展。然而,POSIX echo是这样的。zsh遵循POSIX规范,所以当您编写echo \\\\\\时,会发生这样的情况。
\\\\\\简化为\\\;每个转义\都会变成一个文字\。echo接受它收到的三个\,并将第一个\\替换为\。其余的\并不先于任何东西,因此它是按字面处理的。\的输出。对于echo \\\\\\\\,下面是所发生的事情。
\\\\\\\\变成了\\\\,因为每对反斜杠在移除引号后都变成了一个\。echo接受4个反斜杠,并将第一个\\替换为\,第二个\\也替换为\,因为这一次它收到了两个匹配的对。\。bash可能继承了ksh的非POSIX特性,从定义上讲,sh是一个POSIX兼容的外壳,最好不要考虑csh正在做什么。
发布于 2019-06-02 12:01:30
不仅是zsh,它在终端中的默认行为,反斜杠(\)是一个特殊字符,用于告诉bash脚本您想要换行中的其他参数/文本,因此为了避免换行符,您需要添加另一个反斜杠来转义特殊字符,因为反斜杠也用于转义特殊字符。
https://stackoverflow.com/questions/56414633
复制相似问题