在zsh中:
>> echo '\\'
\
我希望单引号之间的字符串根本不会被解释(bash将显示//)。所以我想知道为什么zsh将这里的双反斜杠变成一个单反斜杠。
也许这是我可以设置的选项?
答案 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