Steven já explicou por que tantas barras invertidas são necessárias; Eu gostaria de listar algumas maneiras possivelmente melhores para fazer a mesma coisa. Primeiro, usar aspas simples em vez de aspas duplas pula o nível extra de interpretação / remoção de escape:
$ echo -e "Test\\nNewline"
Test\nNewline
$ echo -e 'Test\\nNewline'
Test\
Newline
Em segundo lugar, eu recomendo contra usar
echo
para coisas como esta, já que diferentes versões se comportam de forma bem diferente: alguns interpretam seqüências de escape na string (como
\n
) mesmo sem a opção
-e
, alguns imprima o "-e" como parte de sua saída, etc. Aqui está um exemplo usando / bin / echo em vez da versão integrada do bash:
$ /bin/echo -e 'Test\\nNewline'
-e Test\\nNewline
... Isso está no OS X v10.10.4; pode ser diferente no seu sistema operacional e / ou versão. Sempre que você quiser um comportamento previsível com a interpretação de escape e / ou deixar o avanço de linha final, recomendo printf
em vez de echo
. É um pouco mais complicado: o primeiro argumento para printf
é uma string de formato, na qual os escapes são sempre interpretados, e isso também pode incluir %
de sequências que serão usadas para adicionar argumentos restantes (nos quais as seqüências de escape não são interpretadas). Além disso, printf
não adiciona automaticamente um feed de linha no final. Você precisa incluir isso explicitamente. Aqui estão algumas maneiras de imprimir o que você deseja com printf
:
$ printf 'Test\\nNewline\n' # note explicit final newline
Test\
Newline
$ printf '%s\n' 'Test\' 'Newline' # Escape is interpreted in the format string, but not in the second argument
Test\
Newline