A resposta curta é que \
nem sempre é especial para bash
ou para echo
. As aspas duplas preservam o valor da string literal de tudo dentro, exceto $
, '
, \
e, às vezes, !
. Fora as aspas duplas, \
é sempre especial para bash: ele preserva o valor da string literal do caractere seguinte. Dentro das aspas, a contra-barra \
é especial apenas quando seguida por um dos cinco caracteres: $
, '
, "
, \
ou uma nova linha. Nos quatro primeiros casos, ele preserva o valor da string literal do caractere seguinte. Para a versão bash
do eco, \
nunca é especial, a menos que o sinalizador -e
seja fornecido.
Então, nos dois casos, o que está acontecendo:
echo "\n"
neste caso, \
não é seguido por um dos cinco caracteres mencionados e, portanto, é tratado como seu valor de string literal.
echo "\n"
neste caso, o primeiro \
é seguido por um segundo \
. O primeiro escapa do segundo, de modo que é interpretado como seu valor de string literal. Isso é inútil aqui, já que seria interpretado como seu valor de string literal de qualquer maneira , mas poderia ser útil se você quisesse imprimir uma única barra invertida no final de uma linha, como em:
echo "This is a single backslash:\"
caso contrário, a barra invertida seria interpretada pelo shell como escapando de "
.
Todas essas informações podem ser obtidas da parte da página bash
man sobre aspas duplas, encontradas aqui .