web-dev-qa-db-fra.com

Comment imprimer "-n" sans créer de nouvelle ligne?

J'essaie d'imprimer -n à l'aide de la commande echo. Mais si je tape simplement echo -n, il n’émettra qu’une nouvelle ligne, pas d’affichage -n, mais une nouvelle ligne.

16
Star OS

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

  -n  do not append a newline

Il y a différentes façons de contourner cela:

  1. Faites-en quelque chose qui ne soit pas une option en incluant un autre personnage. Par exemple, indiquez à echo de ne pas imprimer de nouvelle ligne avec -n, puis indiquez-lui d'interpréter les caractères d'échappement avec barre oblique inversée avec -e et d'ajouter explicitement la nouvelle ligne.

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

    $ echo " -n"
     -n
    

    Cela ajoute cependant un espace dont vous ne voulez probablement pas.

  3. Utilisez un caractère non imprimable devant. Ici. J'utilise le retour arrière (\b)

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

    Cela ajoute également un caractère supplémentaire que vous ne voulez probablement pas.

  4. Utiliser la ruse

    $ echo n- | rev
    -n
    

    La commande rev imprime simplement sa sortie inversée.

  5. Utilisez le bon outil pour le travail

    $ printf -- '-n\n'
    -n
    
28
terdon

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

% printf "-n\n"       
-n
15
A.B.

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

echo -e  "\r-n"

C'est une sorte de bidouille.

-e active les symboles de commande de barre oblique inversée.

\r est un retour à la ligne.

En réalité, tout caractère valide \ sera inséré n'importe où dans la chaîne.

Vous pouvez voir ceux qui sont valides par help echo.

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

P.S. La meilleure solution à mon humble avis est

echo -e "-n\c"

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

echo -e "-n\n"

affiche le même mais avec un nouveau caractère de ligne.

7
Pilot6

Vous y réfléchissez vraiment.

 echo -e \\055n

Ou sans fin de ligne

 echo -en \\055n
5
Joshua

Je pense que si vous voulez vraiment utiliser echo uniquement, cela devrait vous satisfaire:

echo "-n "

Cela fonctionne car, alors que -n est une option valide pour echo, -n avec un espace après ce n’est pas le cas. Comme ce n’est pas une option, echo l’imprime simplement.

5
Sadi

Dans le script Bash, vous pouvez exécuter:

echo -n -
echo n

Ou en coquille interacive:

echo -n - ; echo n

Ceci echoes un - et un n.

2
jiwopene

Pour prolonger la réponse de @A.B, le seul moyen portable d'utiliser echo est de s'abstenir d'utiliser des options telles que -n. Pensez à utiliser printf à la place, si disponible. Cette page de référence fournit plus de détails et explique très bien quand et comment utiliser echo et printf:

De nos jours, echo (1) n'est portable que si vous omettez les drapeaux et les séquences d'échappement. Utilisez plutôt printf (1) si vous avez besoin de plus que du texte brut.

2
Dmitry Grigoryev

Trois autres moyens:

$ echo -e '\x2dn' # ASCII hexadecimal value
-n
$ echo -e '\u002dn' # Unicode code point
-n
$ echo -e '\u2dn' # Unicode code point shortened
-n
1
kos

Tu peux courir

printf -n;echo

Testé dans Busybox Ash

0
jiwopene