zsh 中的双反斜杠被解释为单反斜杠 ('\\' -> \)
Double backslash in zsh is interpreted to a single backslash ('\\' -> \)
在 zsh 中:
>> echo '\'
\
我希望单引号之间的字符串根本不会被解释,(bash 会显示 //)。所以我想知道为什么 zsh 会把这里的双反斜杠变成单反斜杠。
也许这是我可以设置的选项?
➜ ~ echo $SHELL
/bin/zsh
➜ ~ echo "//"
//
➜ ~ echo '//'
//
➜ ~ echo //
//
➜ ~ echo "\/"
\/
➜ ~ echo '\/'
\/
➜ ~ echo \/
/
➜ ~ which echo
echo: shell built-in command
➜ ~
您可能注意到 zsh 有自己的内置 echo,因此您可以通过 -e/-E 选项控制您期望的行为。参见 http://zsh.sourceforge.net/Doc/Release/Shell-Builtin-Commands.html
➜ ~ echo -E '\'
\
➜ ~ echo -e '\'
\
➜ ~ echo -e '//'
//
➜ ~ echo -E '//'
//
➜ ~
echo
,默认情况下,在 zsh
中符合 POSIX,这意味着 echo
本身将处理某些以 [=17= 开头的字符对】 特别地。确实,在单引号内,没有任何内容被转义。单个反斜杠可以出现在单引号内:
% echo '\'
\
也可以使用 '\'
将两个反斜杠传递给 echo
。但是,现在 echo
本身 将 \
视为表示单个反斜杠的一对,因为某些其他对被特殊对待。仅举两个例子,\t
表示水平制表符
% echo 'a\tb'
a b
而\n
表示换行
% echo 'a\nb'
a
b
这意味着能够打印出 \
和 n
这两个字符,例如,您需要某种方式来指定反斜杠,而不会转义后面的 n
。这种方式是 \
:
% echo '\n'
\n
在 zsh 中:
>> echo '\'
\
我希望单引号之间的字符串根本不会被解释,(bash 会显示 //)。所以我想知道为什么 zsh 会把这里的双反斜杠变成单反斜杠。
也许这是我可以设置的选项?
➜ ~ echo $SHELL
/bin/zsh
➜ ~ echo "//"
//
➜ ~ echo '//'
//
➜ ~ echo //
//
➜ ~ echo "\/"
\/
➜ ~ echo '\/'
\/
➜ ~ echo \/
/
➜ ~ which echo
echo: shell built-in command
➜ ~
您可能注意到 zsh 有自己的内置 echo,因此您可以通过 -e/-E 选项控制您期望的行为。参见 http://zsh.sourceforge.net/Doc/Release/Shell-Builtin-Commands.html
➜ ~ echo -E '\'
\
➜ ~ echo -e '\'
\
➜ ~ echo -e '//'
//
➜ ~ echo -E '//'
//
➜ ~
echo
,默认情况下,在 zsh
中符合 POSIX,这意味着 echo
本身将处理某些以 [=17= 开头的字符对】 特别地。确实,在单引号内,没有任何内容被转义。单个反斜杠可以出现在单引号内:
% echo '\'
\
也可以使用 '\'
将两个反斜杠传递给 echo
。但是,现在 echo
本身 将 \
视为表示单个反斜杠的一对,因为某些其他对被特殊对待。仅举两个例子,\t
表示水平制表符
% echo 'a\tb'
a b
而\n
表示换行
% echo 'a\nb'
a
b
这意味着能够打印出 \
和 n
这两个字符,例如,您需要某种方式来指定反斜杠,而不会转义后面的 n
。这种方式是 \
:
% echo '\n'
\n