J'essaie d'imprimer en -n
utilisant la echo
commande. Mais si je tape simplement echo -n
, il émet uniquement une nouvelle ligne, ne s'affiche pas -n
, à la place, il émet une nouvelle ligne.
getopt
(???) pour analyser la ligne de commande
J'essaie d'imprimer en -n
utilisant la echo
commande. Mais si je tape simplement echo -n
, il émet uniquement une nouvelle ligne, ne s'affiche pas -n
, à la place, il émet une nouvelle ligne.
getopt
(???) pour analyser la ligne de commande
Réponses:
Le problème est que l' echo
interprète -n
comme un argument. Sur l'implémentation bash par défaut, cela signifie (de help echo
):
-n do not append a newline
Il existe différentes façons de contourner cela:
Faites-en quelque chose qui n'est pas une option en incluant un autre personnage. Par exemple, dites de echo
ne pas imprimer une nouvelle ligne avec -n
, puis dites-lui d'interpréter les échappements avec barre oblique inverse -e
et d'ajouter la nouvelle ligne explicitement.
$ echo -ne '-n\n'
-n
Alternativement, 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 avant. Ici. J'utilise le backspace ( \b
)
$ echo -e "\b-n"
-n
Cela ajoute également un caractère supplémentaire que vous ne voulez probablement pas.
Utilisez la ruse
$ echo n- | rev
-n
La rev
commande imprime simplement sa sortie inversée.
Utilisez le bon outil pour le travail
$ printf -- '-n\n'
-n
grep '^-n'
. pritnf
est le chemin à parcourir, vraiment.
printf
c'est mieux de toute façon, mais la question concerne juste echo
.
echo -e "-n\c"
faire exactement la chose.
\c
supprime la sortie supplémentaire
Parfois, c'est une bonne idée d'utiliser le bon outil. Vous pouvez utiliser à la printf
place:
% printf "-n\n"
-n
echo
, alors qu'il printf
est mieux standardisé .
Vous pouvez utiliser cette commande, mais elle ajoute un espace supplémentaire.
echo -e "\r-n"
C'est une sorte de hack.
-e
active les symboles de commande de barre oblique inverse.
\r
est un retour chariot.
En fait, tout \
caractère valide fera à n'importe quel endroit de la chaîne.
Vous pouvez voir lesquels sont valides par help echo
.
echo "-n"
ne fonctionne pas car -n
est utilisé comme paramètre pourecho
.
PS La meilleure solution à mon humble avis est
echo -e "-n\c"
Il n'ajoute aucun caractère supplémentaire .
echo -e "-n\n"
imprime la même chose mais avec un nouveau caractère de ligne.
-n
est valide, -nfoo
n'est pas ainsi qui sera imprimé.
man echo
a aussi. Mais help
c'est un peu mieux.
/bin/echo
est une chose complètement différente et lorsque vous exécutez echo
en bash, vous obtenez le code intégré qui peut être très différent selon votre shell.
Je pense que si vous voulez vraiment utiliser echo
uniquement, cela devrait vous satisfaire:
echo "-n "
Cela fonctionne car while -n
est une option valide pour echo
, -n
avec un espace après qu'il ne l'est pas. Comme ce n'est pas une option, il echo
suffit de l'imprimer.
Vous pensez vraiment trop.
echo -e \\055n
Ou sans retour à la ligne
echo -en \\055n
printf "-n\n"
une réflexion excessive?
/bin/echo
au moins s'il est invoqué commeecho -e "\055n"
Pour étendre la réponse de @ AB, la seule façon portable d'utiliser echo
est de s'abstenir d'utiliser des options comme -n
. Envisagez d'utiliser à la printf
place, le cas échéant. Cette page de référence fournit plus de détails et explique très bien quand et comment echo
et printf
doit être utilisée:
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.
Dans le script Bash, vous pouvez exécuter:
echo -n -
echo n
Ou en coquille interacive:
echo -n - ; echo n
C'est echo
un -
personnage et un n
personnage.
-pilot6@Pilot6:~$
. Les deuxièmes sorties n
.
&&
- je ne dirais pas vraiment que cette réponse est fausse .
Tu peux courir
printf -n;echo
Testé en Busybox Ash
ash
est le nom de l'Almquist Shell.
echo -n -- -n
(je n'ai pas de boîte Linux à portée de main)?