zsh中的双反斜杠被解释为单个反斜杠('//'-> /)

时间:2018-09-28 10:12:26

标签: shell command-line escaping zsh oh-my-zsh

在zsh中:

>> echo '\\'
\

我希望单引号之间的字符串根本不会被解释(bash将显示//)。所以我想知道为什么zsh将这里的双反斜杠变成一个单反斜杠。

也许这是我可以设置的选项?

2 个答案:

答案 0 :(得分:1)

➜  ~ echo $SHELL
/bin/zsh
➜  ~ echo "//"
//
➜  ~ echo '//'
//
➜  ~ echo //
//
➜  ~ echo "\/"
\/
➜  ~ echo '\/'
\/
➜  ~ echo \/
/
➜  ~ which echo
echo: shell built-in command
➜  ~

您可能会注意到zsh具有其自己的内置回显,因此您可以通过-e / -E选项控制您期望的行为。参见http://zsh.sourceforge.net/Doc/Release/Shell-Builtin-Commands.html

➜  ~ echo -E '\\'
\\
➜  ~ echo -e '\\'
\
➜  ~ echo -e '//'
//
➜  ~ echo -E '//'
//
➜  ~ 

答案 1 :(得分:0)

echo默认为zsh中的POSIX兼容,这意味着echo本身将特别对待以\开头的某些字符对。的确,单引号内没有任何逸出。单引号内可以出现一个反斜杠:

% echo '\'
\

也可以使用echo将两个反斜杠传递到'\\'。但是,现在echo 本身\\视为代表单个反斜杠的一对,因为某些其他对被特殊对待。仅举两个,\t代表一个水平制表符

% echo 'a\tb'
a   b

\n代表换行符

% echo 'a\nb'
a
b

例如,这意味着要能够打印两个字符\n,您需要一种指定反斜杠的方式,而不用转义后面的n\\就是这样:

% echo '\\n'
\n