Isso ocorre porque bash e echo -e combinados. De man 1 bash
A non-quoted backslash (
\) is the escape character. It preserves the literal value of the next character that follows, with the exception of<newline>. […]Enclosing characters in double quotes preserves the literal value of all characters within the quotes, with the exception of
$, ',\, […] The backslash retains its special meaning only when followed by one of the following characters:$, ',",\, or<newline>.
O ponto é: barra invertida com aspas duplas nem sempre é especial.
Existem várias implementações de echo em geral, são incorporadas em bash ; o importante aqui é esse comportamento:
If
-eis in effect, the following sequences are recognized:\
backslash
[…]\n
new line
Agora podemos decodificar:
-
echo -e "\ Hello!"- nada especial parabash, nada especial paraecho;\fica. -
echo -e "\ Hello!"- o primeiro\dizbashpara tratar o segundo\literalmente;echoobtém\ Hello!e age como acima. -
echo -e "\\ Hello!"- o primeiro\dizbashpara tratar o segundo\literalmente;echoobtém\ Hello!e (por causa de-e) ele reconhece\como\. -
echo -e "\\ Hello!"- o primeiro\dizbashpara tratar o segundo\literalmente; o terceiro diz o mesmo sobre o quarto;echoobtém\ Hello!e (por causa de-e) ele reconhece\como\. -
echo -e "\\\ Hello!"- o primeiro\dizbashpara tratar o segundo\literalmente; o terceiro diz o mesmo sobre o quarto; o último não é especial;echoobtém\\ Hello!e (por causa de-e) reconhece o% inicial\como\, o último\permanece intacto.
E assim por diante. Como você pode ver, até quatro barras invertidas consecutivas dão um resultado. É por isso que você precisa (pelo menos) nove deles para conseguir três. 9 = 4 + 4 + 1.
Agora com \n :
-
echo -e "\n Hello!"- não há nada de especial embash, o echo obtém a mesma sequência e (por causa de-e) interpreta\ncomo uma nova linha. -
echo -e "\n Hello!"-bashinterpreta\como\;echoobtém\n Hello!e o resultado é o mesmo acima. -
echo -e "\\n Hello!"-bashinterpreta o% inicial\como\;echoobtém\n Hello!e (por causa de-e) interpreta\como um literal\que precisa ser impresso.
Os resultados seriam diferentes com ' em vez de " (devido ao comportamento bash diferente) ou sem -e (comportamento diferente echo ).