Почему эхо \\\\ показывает \ - PullRequest
0 голосов
/ 07 мая 2019

Может ли кто-нибудь объяснить мне, как в этих случаях работают обратные слеши?

Я понимаю, что если вы поставите 1 \, он перейдет к следующей строке (escape \ n). Если вы поставите 2 \, то он показывает один обратный слеш, потому что другой экранирован.

Что я не понимаю, так это то, что при вводе 4 обратных косых черт возвращается только 1, а не 2? Или почему ввод 8 обратной косой черты дает только 2, а не 4? Спасибо!

sh-3.2$ echo \\
\
sh-3.2$ echo \\\\
\
sh-3.2$ echo \\\\\\
\\
sh-3.2$ echo \\\\\\\\
\\

1 Ответ

1 голос
/ 08 мая 2019

Это поведение не соответствует стандартному встроенному echo. Ваша команда echo, вероятно, имеет псевдоним echo -e, который интерпретирует экранированные последовательности:

  • При echo \\\\ оболочка считает, что два последовательных символа \ являются только одним единственным \ символом (первый экранирует второй), и вызывает echo со строкой \\ в качестве параметра. Строка \\ печатается нормально.

  • При echo -e \\\\ оболочка выполняет ту же работу, но затем echo ищет в своем параметре (\\) экранированные символы, которые интерпретируются снова. Таким образом, два последовательных \ отображают только один \. Вот почему строка \ печатается.

Вы можете проверить, что ваш echo имеет псевдоним со встроенным type:

$ type echo
echo is a shell builtin
$ alias echo='echo -e'
$ type echo
echo is aliased to `echo -e'

Вы можете принудительно использовать встроенную функцию echo двумя способами:

$ builtin echo \\\\
\\
$ \echo \\\\
\\
...