19 votes

Comment imprimer "-n" sans émettre de nouvelle ligne ?

J'essaie d'imprimer -n en utilisant le echo commandement. Mais si je tape simplement echo -n il n'émet qu'un saut de ligne et ne s'affiche pas. -n à la place, il émet une nouvelle ligne.

31voto

Stewart Points 1385

Le problème est que echo interprète le -n comme argument. Dans l'implémentation par défaut de bash, cela signifie (à partir de help echo ):

  -n  do not append a newline

Il existe plusieurs façons de contourner ce problème :

  1. Faites-en quelque chose qui n'est pas une option en incluant un autre personnage. Par exemple, dites echo de ne pas imprimer un saut de ligne avec -n puis dites-lui d'interpréter les échappements de backslash avec -e et ajouter la nouvelle ligne explicitement.

    $ echo -ne '-n\n'
    -n
  2. Sinon, il suffit d'inclure un espace

    $ echo " -n"
     -n

    Cependant, cela ajoute un espace que vous ne voulez probablement pas.

  3. Utilisez un caractère non-imprimant avant lui. Ici. J'utilise le retour arrière ( \b )

    $ echo -e "\b-n"
    -n

    Cela ajoute également un personnage supplémentaire dont vous ne voulez probablement pas.

  4. Utiliser la ruse

    $ echo n- | rev
    -n

    En rev imprime simplement sa sortie inversée.

  5. Utilice le bon outil pour le travail

    $ printf -- '-n\n'
    -n

16voto

A.B. Points 84870

Parfois, c'est une bonne idée d'utiliser le bon outil. Vous pourriez utiliser printf à la place :

% printf "-n\n"       
-n

7voto

user167850 Points 230

Vous pouvez utiliser cette commande, mais elle ajoute un espace supplémentaire.

echo -e  "\r-n"

C'est une sorte de piratage.

-e active les symboles de commande de type backslash.

\r est un retour chariot.

En fait, tout \ Un caractère valide fera l'affaire à n'importe quel endroit de la chaîne.

Vous pouvez voir lesquels sont valides en help echo .

echo "-n" ne fonctionne pas car -n est utilisé comme paramètre pour echo .

P.S. La meilleure solution, selon moi, est

echo -e "-n\c"

Il n'ajoute pas tout caractère supplémentaire .

echo -e "-n\n"

imprime la même chose mais avec un nouveau caractère de ligne.

5voto

Sadi Points 10633

Je pense que si tu veux vraiment utiliser echo seulement, cela devrait vous satisfaire :

echo "-n "

Cela fonctionne parce que pendant que -n est une option valable pour echo , -n avec un espace après, ne l'est pas. Puisque ce n'est pas une option, echo Il suffit de l'imprimer.

5voto

Joshua Points 550

Les gars, vous réfléchissez vraiment trop.

 echo -e \\055n

Ou sans nouvelle ligne de fin

 echo -en \\055n

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X