Como imprimo barra invertida seguida de nova linha com printf?

1

Usando o Python, recebo

$ python3 -c 'print("\\n")'
\

$ 

Ou seja, uma barra invertida e uma nova linha, seguidas por uma nova linha extra inserida pelo intérprete.

Usando C, compilando o código

#include <stdio.h>

int main(void)
{
    printf("\\n");
    return 0;
}

em um arquivo backslash.out yields

$ ./backslash.out 
\
$ 

Ou seja, uma barra invertida e uma nova linha.

No bash, recebo

$ STRING="\\n"
$ printf "${STRING}"
\n$ 

O que exatamente o comando bash printf está fazendo aqui? O que está fazendo diferente dos comandos python print ou C printf em relação ao caractere de escape \ ? E o que eu preciso colocar na variável STRING para obter a seguinte saída no meu terminal:

$ printf "${STRING}"
\
$ 
    
por Jonas Dahlbæk 23.01.2018 / 16:39

1 resposta

2

Em seu snippet abaixo, você usa "aspas duplas" ao redor das saídas de contrabarra:

$ STRING="\\n"
$ printf "${STRING}"
\n$ 

No entanto, o Bash ainda avalia algumas escapes entre barras invertidas entre aspas duplas, então o conteúdo de sua variável depois disso é realmente \n , já que "\" é avaliado como \ .

Coloque a sequência em 'aspas simples' para impedir que o shell toque em nenhuma das barras invertidas:

$ STRING='\\n'
$ printf "$STRING"
\
$ 
    
por Byte Commander 23.01.2018 / 16:55