Двойная обратная косая черта в zsh интерпретируется как одна обратная косая черта ('//' -> /) - PullRequest
0 голосов
/ 28 сентября 2018

В zsh:

>> echo '\\'
\

Я ожидал, что строки между одинарными кавычками вообще не будут интерпретироваться (bash покажет //).Поэтому мне интересно, почему zsh превращает двойной обратный слеш здесь в один.

Может быть, я могу установить этот параметр?

Ответы [ 2 ]

0 голосов
/ 01 октября 2018

echo по умолчанию является POSIX-совместимым в zsh, что означает, что echo сам будет обрабатывать определенные пары символов, начиная с \ специально.Это правда, что внутри одинарных кавычек ничего не избежать.В одинарных кавычках может отображаться одна обратная косая черта:

% echo '\'
\

Две обратные косые черты также можно передать в echo с помощью '\\'.Однако теперь echo сам обрабатывает \\ как пару, представляющую один обратный слеш, потому что некоторые другие пары обрабатываются специально.Просто назовем два, \t представляет горизонтальную вкладку

% echo 'a\tb'
a   b

, в то время как \n представляет перевод строки

% echo 'a\nb'
a
b

Это означает, что можно печатать два символа \и n, например, вам нужен какой-то способ указать обратную косую черту, без экранирования следующего n.Этот путь с \\:

% echo '\\n'
\n
0 голосов
/ 01 октября 2018
➜  ~ 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 '//'
//
➜  ~ 
...