web-dev-qa-db-fra.com

Comment puis-je imprimer une barre oblique inverse suivie de newline avec printf?

En utilisant Python, je reçois

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

$ 

C'est-à-dire une barre oblique inverse et une nouvelle ligne, suivies d'une nouvelle ligne supplémentaire insérée par l'interprète.

Utiliser C pour compiler le code

#include <stdio.h>

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

dans un fichier backslash.out

$ ./backslash.out 
\
$ 

C'est-à-dire, une barre oblique inverse et une nouvelle ligne.

En bash, je reçois

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

Que fait exactement la commande bash printf ici? Que fait-il différemment des commandes python print ou C printf par rapport au caractère d'échappement \? Et que dois-je mettre dans la variable STRING pour obtenir la sortie suivante sur mon terminal:

$ printf "${STRING}"
\
$ 
2
Jonas Dahlbæk

Dans l'extrait ci-dessous, vous utilisez des "guillemets" autour des échappements de la barre oblique inversée:

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

Cependant, Bash évalue toujours des barres obliques inverses entre guillemets doubles. Par conséquent, le contenu de votre variable après cela est réellement \\n, comme "\\" est évalué à \.

Mettez la chaîne entre guillemets simples pour empêcher le shell de toucher les barres obliques inverses:

$ STRING='\\\n'
$ printf "$STRING"
\
$ 
3
Byte Commander