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.
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.
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:
help echo
which echo
ce qui peut entraîner une certaine confusion.
J'ai finalement correctement formater cette chaîne avec printf "$string"
. Merci à tous.