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.
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:
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
Sinon, il suffit d'inclure un espace
$ echo " -n"
-n
Cela ajoute cependant un espace dont vous ne voulez probablement pas.
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.
Utiliser la ruse
$ echo n- | rev
-n
La commande rev
imprime simplement sa sortie inversée.
Utilisez le bon outil pour le travail
$ printf -- '-n\n'
-n
Parfois, c'est une bonne idée d'utiliser le bon outil. Vous pouvez utiliser printf
à la place:
% printf "-n\n"
-n
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.
Vous y réfléchissez vraiment.
echo -e \\055n
Ou sans fin de ligne
echo -en \\055n
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.
Dans le script Bash, vous pouvez exécuter:
echo -n -
echo n
Ou en coquille interacive:
echo -n - ; echo n
Ceci echo
es un -
et un n
.
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.
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
Tu peux courir
printf -n;echo
Testé dans Busybox Ash