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

15

Je vide une chaîne avec hexdumpcomme ça 2031 3334 2e30 0a32 2032 3331 302e 000a. Il est clair que 0x0ac'est un nouveau caractère de ligne, cependant, quand j'essaie de faire écho à cette chaîne, je l'ai toujours 1 430.2 2 13.0- la nouvelle ligne est remplacée par un espace, même si j'utilise le -edrapeau.

Quel peut être le problème? Le tail \0ruine-t-il la sortie? Existe-t-il des alternatives pour imprimer 0x0aune nouvelle ligne?

Merci et meilleures salutations.

Summer_More_More_Tea
la source
quand j'essaie de faire écho à cette chaîne Comment faites-vous exactement cela? Quelle est la commande exacte que vous utilisez?
Dennis
@ Dennis je veux dire echo -e. Merci, je trouve une solution.
Summer_More_More_Tea
1
la solution préférée est simplement d'utiliser printf "...\n"au lieu de echo.
michael
stackoverflow.com/questions/8467424/…
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

Réponses:

26

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

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

Entraînerait la sortie

This is line 1
This is line 2

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

Izzy
la source
3
btw, cela "echo -e ..."repose sur l'écho de bash pour fonctionner correctement (par exemple, dashaffichera simplement le "-e"); mais '/ bin / echo' peut (ou non) fonctionner aussi. Malheureusement (peut-être de manière appropriée), il y a beaucoup d'écho autour, et vous ne voulez pas vraiment vous soucier de celui que vous allez obtenir. L'utilisation 'printf "....\n"est une option plus portable à travers les env et les shells.
michael
@michael_n qui est ce que l'OP est finalement revenu aussi , en fait. Mais la question indiquait explicitement "avec écho" - d'où ma réponse de cette façon. Quoi qu'il en soit, ce n'était pas "avec Bash" - alors merci d'avoir souligné ces différences!
Izzy
4

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 <backslash>, les résultats sont définis par l'implémentation.

sauf si vous disposez d'une extension XSI en option.

Utilisez donc à la printfplace:

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

la notation du format de fichier :

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

Gardez également à l'esprit que Ubuntu 15.10 et la plupart des distributions implémentent les echodeux comme:

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

ce qui peut entraîner une certaine confusion.

Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
la source
2

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

Summer_More_More_Tea
la source
De quoi $stringparlez-vous? Comment est-ce lié à la question? Qu'est-ce que cela n'implique pas \ncomme dans les deux autres réponses?
Peter Mortensen