web-dev-qa-db-fra.com

Comment imprimer un nouveau caractère de ligne avec écho?

Je vide une chaîne avec hexdump comme ceci 2031 3334 2e30 0a32 2032 3331 302e 000a. Il est clair que 0x0a est le caractère de nouvelle ligne, cependant, lorsque j'essaie d'exprimer cette chaîne en boucle, j'ai toujours 1 430.2 2 13.0 - la nouvelle ligne est remplacée par un espace, même si j'utilise le drapeau -e.

Quel peut être le problème? Est-ce que le \0 ruine la sortie? Existe-t-il des alternatives pour imprimer 0x0a une nouvelle ligne?

Merci et meilleures salutations.

14

Le nouveau caractère de ligne avec la commande echo est "\ n". Prenons l'exemple suivant:

echo -e "This is line 1\nThis is line 2"

Aboutirait à la sortie

This is line 1
This is line 2

Le paramètre "-e" est important ici.

23
Izzy

POSIX 7 dit que vous ne pouvez pas

http://pubs.opengroup.org/onlinepubs/9699919799/utilities/echo.html

-e n'est pas défini et les barres obliques inverses sont définies par l'implémentation:

Si le premier opérande est -n ou si l'un des opérandes contient un caractère <barre oblique inverse>, les résultats sont définis par l'implémentation.

sauf si vous avez une extension XSI en option.

Donc, utilisez plutôt printf :

l'opérande de format doit être utilisé comme chaîne de format décrite dans la notation de format de fichier XBD [...]

la notation de format de fichier :

\ n <nouvelle ligne> Déplace la position d’impression au début de la ligne suivante.

N'oubliez pas non plus qu'Ubuntu 15.10 et la plupart des distributions implémentent echo en tant que:

  • un Bash intégré: help echo
  • un exécutable autonome: which echo

ce qui peut entraîner une certaine confusion.

J'ai finalement correctement formater cette chaîne avec printf "$string". Merci à tous.

2