Por que o comando echo não precisa da opção “-e” ao escapar do caractere “$” com uma barra invertida

0

Isso é sobre o bash builtin echo . Documentação por Bash, a opção -e permite a interpretação de escapes de barra invertida.
Se eu executar echo "Total Amount \0" , vejo a saída esperada Total Amount $500 . Aqui eu posso usar a barra invertida para obter o caractere "$" sem usar a opção -e . Mas, para escapar de uma nova linha ou de um guia, preciso ter a opção -e no    Comando echo como este- echo -e "Total Amount: \n \0" .

    
por Ravi Kumar 26.10.2017 / 20:52

2 respostas

1

Existem duas etapas de transformação de string.

  1. Primeiro bash analisa a linha de comando echo -e "Total Amount: \n \0" e determina que precisa invocar um comando chamado echo com dois argumentos. O primeiro argumento é -e . O segundo argumento é o resultado da expansão do literal "Total Amount: \n \0" com aspas duplas. Dadas as regras para strings com aspas duplas¹, \$ se transforma em $ e \n fica \n , então o segundo argumento que é passado para o comando echo é Total Amount: \n $500 .
  2. O comando echo, no modo -e , substitui algumas sequências começando com barra invertida em um único caractere, por exemplo, ele substitui \n por um caractere de nova linha.

Note que "escapar" significa duas coisas diferentes na sua pergunta. Na primeira etapa, a barra invertida em \$ “escapa” do $ no sentido de que o caractere $ escapa do processamento especial e permanece intacto. Na segunda etapa, a barra invertida em \n "escapa" do processamento normal para aplicar algum processamento especial ao n , o que leva a um caractere de nova linha.

¹ Barra invertida seguida por uma das "$\' se torna apenas o segundo caractere; backslash seguido por qualquer outra coisa permanece.
² Barra invertida seguida por algumas letras minúsculas se torna um caractere de controle; barra invertida seguida de dígitos se torna o caractere com aquele ponto de código em octal; barra invertida seguida por uma das xuU e alguns dígitos hexadecimais faz o mesmo com hexa; barra invertida seguida por qualquer outra coisa se torna apenas o segundo caractere.

    
por 26.10.2017 / 22:29
3

O manual bash diz o seguinte em relação a echo quando usado com a opção -e :

If the -e option is given, interpretation of the following backslash-escaped characters is enabled.

Especifica " os seguintes caracteres de barra invertida" e lista-os:

\a
alert (bell)

\b
backspace

\c
suppress further output

\e
\E
escape

\f
form feed

\n
new line

\r
carriage return

\t
horizontal tab

\v
vertical tab

\
backslash

\a
alert (bell)

\b
backspace

\c
suppress further output

\e
\E
escape

\f
form feed

\n
new line

\r
carriage return

\t
horizontal tab

\v
vertical tab

\
backslash

%pre%nnn
the eight-bit character whose value is the octal value nnn (zero to three octal digits)

\xHH
the eight-bit character whose value is the hexadecimal value HH (one or two hex digits)

\uHHHH
the Unicode (ISO/IEC 10646) character whose value is the hexadecimal value HHHH (one to four hex digits)

\UHHHHHHHH
the Unicode (ISO/IEC 10646) character whose value is the hexadecimal value HHHHHHHH (one to eight hex digits)
nnn the eight-bit character whose value is the octal value nnn (zero to three octal digits) \xHH the eight-bit character whose value is the hexadecimal value HH (one or two hex digits) \uHHHH the Unicode (ISO/IEC 10646) character whose value is the hexadecimal value HHHH (one to four hex digits) \UHHHHHHHH the Unicode (ISO/IEC 10646) character whose value is the hexadecimal value HHHHHHHH (one to eight hex digits)

Isso pode ser confuso, porque esses são realmente mais um escape sequence do que um escape character o escape character ( \ ).

Sequência de escape

An escape sequence is a sequence of characters that does not represent itself when used inside a character or string literal, but is translated into another character or a sequence of characters that may be difficult or impossible to represent directly.

Escape Character

In computing and telecommunication, an escape character is a character which invokes an alternative interpretation on subsequent characters in a character sequence. An escape character is a particular case of metacharacters. Generally, the judgment of whether something is an escape character or not depends on context.

A opção -e tem muito pouco a ver com o caractere de escape, mas permite que ele seja usado em combinação com o sequences acima para que sejam interpretados com um significado especial.

    
por 26.10.2017 / 20:56