\ n não funciona no terminal

3

\n não é reconhecido como "linha de alteração". Apenas imprime \n .

Meu terminal é o terminal gnome 3.6.2.

Primeiro eu notei isso com os comandos echo e depois com scripts de shell.

Alguma sugestão de por que não funciona?

    
por PaschalisAv 07.08.2015 / 08:28

2 respostas

6

Por padrão, a versão GNU padrão de echo entregue com o Ubuntu não reconhece as seqüências de escape. Use o sinalizador -e para ativar isso.

Compare as saídas:

serg@ubuntu(bash):[/home/xieerqi]$ echo "new\nline"
new\nline
serg@ubuntu(bash):[/home/xieerqi]$ echo -e "new\nline"
new
line

Em geral, echo em scripts não é recomendado. Por exemplo, mksh versão de echo permite interpretar as fugas.

Para portabilidade de scripts, use a função printf .

serg@ubuntu(bash):[/home/xieerqi]$ printf "new\nline\n"
new
line
    
por Sergiy Kolodyazhnyy 07.08.2015 / 08:36
1

A resposta de Serg resolve apenas o problema com a impressão de nova linha ( echo , printf ). Se você precisar usar a nova linha em geral em shell scripts, aqui estão algumas sugestões que demonstram o uso de uma nova linha, armazenando-a em uma variável $NL . Quando o código funciona corretamente, o echo "a${NL}b" imprime:

a
b

sh compatível com POSIX

Você pode usar uma nova linha literal:

NL="
"

Você pode gerar a nova linha usando printf e substituição de comando:

NLx="$(printf \nx)" ; NL="${NLx%x}"

O acréscimo de x e a seguinte remoção dele é necessário porque a substituição de comandos remove todas as novas linhas no final da string resultante.

Bash

No Bash você pode usar seqüências de escape para representar caracteres de controle em uma string entre $' e ' :

NL=$'\n'

Isso é muito conveniente, mas infelizmente não é portável.

    
por pabouk 07.08.2015 / 14:37