J'essaie d'imprimer en -nutilisant la echocommande. 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 -nutilisant la echocommande. 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' echointerprète -ncomme 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 echone pas imprimer une nouvelle ligne avec -n, puis dites-lui d'interpréter les échappements avec barre oblique inverse -eet d'ajouter la nouvelle ligne explicitement.
$ echo -ne '-n\n'
-nAlternativement, 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 revcommande imprime simplement sa sortie inversée.
Utilisez le bon outil pour le travail
$ printf -- '-n\n'
-ngrep '^-n'. pritnfest le chemin à parcourir, vraiment.
printfc'est mieux de toute façon, mais la question concerne juste echo.
echo -e "-n\c"faire exactement la chose.
\csupprime la sortie supplémentaire
Parfois, c'est une bonne idée d'utiliser le bon outil. Vous pouvez utiliser à la printfplace:
% printf "-n\n"
-n
echo, alors qu'il printfest 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 -nest 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.
-nest valide, -nfoon'est pas ainsi qui sera imprimé.
man echoa aussi. Mais helpc'est un peu mieux.
/bin/echoest une chose complètement différente et lorsque vous exécutez echoen 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 echouniquement, cela devrait vous satisfaire:
echo "-n "
Cela fonctionne car while -nest une option valide pour echo, -navec un espace après qu'il ne l'est pas. Comme ce n'est pas une option, il echosuffit 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/echoau moins s'il est invoqué commeecho -e "\055n"
Pour étendre la réponse de @ AB, la seule façon portable d'utiliser echoest de s'abstenir d'utiliser des options comme -n. Envisagez d'utiliser à la printfplace, le cas échéant. Cette page de référence fournit plus de détails et explique très bien quand et comment echoet printfdoit ê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 echoun -personnage et un npersonnage.
-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
ashest le nom de l'Almquist Shell.
echo -n -- -n(je n'ai pas de boîte Linux à portée de main)?