Existem duas etapas de transformação de string.
- Primeiro bash analisa a linha de comando
echo -e "Total Amount: \n \0"
e determina que precisa invocar um comando chamadoecho
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 comandoecho
éTotal Amount: \n $500
. - 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.