\é um operador de aspas para o shell. Quando fora de outros tipos de aspas, \xé como 'x'(exceto quando xé o caractere de nova linha).
Então:
echo \\\x
é como:
echo '\''x'
Ou
echo '\x'
So echoé invocado com dois argumentos, um que contém echo(seu nome) e outro que contém \x.
Por POSIX , o comportamento de echoquando qualquer um de seus operandos (argumentos diferentes do nome do comando) contém uma barra invertida ou seu primeiro operando é -nnão especificado. Você descobrirá que o comportamento varia mesmo fora disso.
De acordo com a especificação do UNIX (com XSI aplicado no link acima), o comportamento de echo '\z'também não é especificado, pois \znão é uma das sequências de escape padrão.
Com um compatível com UNIX echo, como o echointegrado de bash -o posix -O xpg_echo, você pode ter a garantia de que:
echo '\\z'
igual a:
echo \\\\z
ou:
echo \\\\\z
irá produzir \z<newline>.
Fora isso, você não terá nenhuma garantia do POSIX.
A implementação pode gerar zou \zou no such escape sequence: \zou um caractere NUL...
Na prática, porém, não conheço nenhuma implementação que entenda \zcomo uma sequência de escape, então acho que todas as que tentei têm saída \z<newline>lá.
Se você deseja uma maneira portátil e confiável de produzir texto, não use echo, printfuse .
\
é um operador de aspas para o shell. Quando fora de outros tipos de aspas,\x
é como'x'
(exceto quandox
é o caractere de nova linha).Então:
é como:
Ou
So
echo
é invocado com dois argumentos, um que contémecho
(seu nome) e outro que contém\x
.Por POSIX , o comportamento de
echo
quando qualquer um de seus operandos (argumentos diferentes do nome do comando) contém uma barra invertida ou seu primeiro operando é-n
não especificado. Você descobrirá que o comportamento varia mesmo fora disso.De acordo com a especificação do UNIX (com XSI aplicado no link acima), o comportamento de
echo '\z'
também não é especificado, pois\z
não é uma das sequências de escape padrão.Com um compatível com UNIX
echo
, como oecho
integrado debash -o posix -O xpg_echo
, você pode ter a garantia de que:igual a:
ou:
irá produzir
\z<newline>
.Fora isso, você não terá nenhuma garantia do POSIX.
A implementação pode gerar
z
ou\z
ouno such escape sequence: \z
ou um caractere NUL...Na prática, porém, não conheço nenhuma implementação que entenda
\z
como uma sequência de escape, então acho que todas as que tentei têm saída\z<newline>
lá.Se você deseja uma maneira portátil e confiável de produzir texto, não use
echo
,printf
use .Divida o eco da instrução em seções
\ é a variável que o bash reconhece como escape
Portanto \ está escapando do caractere "\" portanto imprimindo \
\z está escapando do caractere "z", portanto, imprimindo z
Juntos, temos \z