\
é um operador de cotação para o shell. Quando fora de outros tipos de cotações, \x
é como 'x'
(exceto quando x
é o caractere de nova linha).
Então:
echo \\x
é como:
echo '\''x'
Ou
echo '\x'
Portanto, echo
é invocado com dois argumentos, um que contém echo
(seu nome) e um que contém \x
.
Por POSIX , o comportamento de echo
quando qualquer um de seus operandos (argumentos outros que o nome do comando) contém uma barra invertida ou seu primeiro operante é -n
não especificado. Você verá que o comportamento varia mesmo fora disso.
De acordo com a especificação do UNIX (com o XSI aplicando no link acima), o comportamento de echo '\z'
também não é especificado, pois \z
não é uma das seqüências de escape padrão.
Com um echo
compatível com UNIX, como o echo
incorporado em bash -o posix -O xpg_echo
, você pode garantir que:
echo '\z'
o mesmo que:
echo \\z
ou:
echo \\\z
produzirá \z<newline>
.
Além disso, você não receberá qualquer garantia do POSIX.
A implementação pode gerar z
ou \z
ou no such escape sequence: \z
ou um caractere NUL ...
Na prática, no entanto, eu não conheço nenhuma implementação que entenda \z
como uma seqüência de escape, então eu acho que todas as que eu tentei produzir \z<newline>
lá.
Se você quiser uma maneira portátil e confiável de produzir texto, não use echo
, use printf
.