Почему команда echo `echo \\\z` выводит \z?

Почему команда echo `echo \\\z` выводит \z?

Команда echo $(echo \\\z)откнига , я не понимаю, почему он выводит

Я думаю, что это должно вывести

з

решение1

\— оператор кавычек для оболочки. Когда находится вне других видов кавычек, \xто имеет вид 'x'(за исключением случаев, когда xэто символ новой строки).

Так:

echo \\\x

как:

echo '\''x'

Или

echo '\x'

So echoвызывается с двумя аргументами, один из которых содержит echo(его имя), а другой — \x.

Согласно POSIX, поведение, echoкогда любой из его операндов (аргументы, отличные от имени команды) содержит обратную косую черту или его первый операнд -nне определен. Вы обнаружите, что поведение меняется даже за пределами этого.

Согласно спецификации UNIX (с применением XSI по ссылке выше), поведение echo '\z'также не определено, поскольку \zне является одной из стандартных управляющих последовательностей.

Однако с помощью UNIX-совместимого echo, например echoвстроенного bash -o posix -O xpg_echo, вы можете быть уверены, что:

echo '\\z'

такой же как:

echo \\\\z

или:

echo \\\\\z

выведет \z<newline>.

Помимо этого, вы не получите никаких гарантий от POSIX.

Реализация может выводить zили \zили no such escape sequence: \zили символ NUL...

Однако на практике я не знаю ни одной реализации, которая понимала бы это \zкак escape-последовательность, поэтому я обнаружил, что все те, которые я пробовал, выводят \z<newline>именно так.

Если вам нужен портативный и надежный способ вывода текста,не используйте echo, используйте printfвместо этого.

решение2

Разделить эхо-заявку на разделы

\ — это переменная, которую bash распознает как escape

Поэтому \ экранирует символ "\", поэтому печатает \

\z экранирует символ "z", поэтому печатает z

Взятые вместе, мы имеем \z

Связанный контент