J'ai un problème avec echo
dans mon script:
echo -n "Some string..."
impressions
-n Some string...
et passe à la ligne suivante. Dans la console, cela fonctionne correctement sans nouvelle ligne:
Some string...
shell
command-line
sh
qwertz
la source
la source
bash
en mode shell bourne, cela fonctionne très bien ici. De plus, il est peu probable que vous utilisiez vraiment un shell bourne comme shell interactif, non?echo -ne "text without new line: "; echo "some text";
Réponses:
Il existe plusieurs versions de la
echo
commande, avec des comportements différents. Apparemment, le shell utilisé pour votre script utilise une version qui ne reconnaît pas-n
.La
printf
commande a un comportement beaucoup plus cohérent.echo
est bien pour des choses simples commeecho hello
, mais je suggère d'utiliserprintf
pour quelque chose de plus compliqué.Sur quel système êtes-vous et sur quel shell votre script utilise-t-il?
la source
#!/bin/bash
cela a fonctionné. Normalement, je travaille avec bash.printf
commande.echo
ajoute toujours des nouvelles lignes ... La solution de contournement est au mieux jenky.%
est votre invite shell. Essayez ceci et regardez attentivement:printf hello; sleep 5
bash
a une commande "intégrée" appelée "echo":De plus, il existe une commande "echo" qui est un exécutable approprié (c'est-à-dire les fourches et les exécutables du shell
/bin/echo
, par opposition à son interprétationecho
et son exécution):Le comportement du
echo
WRT de l'un\c
et de l'autre-n
varie. Votre meilleur pari est d'utiliserprintf
, qui est disponible sur quatre différentes saveurs * NIX que j'ai examinées:la source
Essayez avec
Cela fonctionne pour moi comme prévu (comme je l'ai compris dans votre question).
Notez que j'ai obtenu ces informations sur la
man
page. Laman
page note également que le shell peut avoir sa propre version deecho
, et je ne sais pas s'ilbash
a sa propre version.la source
echo "some string...\c"
place. Si toutefois vous devez prendre en charge plusieurs variantes de bash avec des commandes d'écho très différentes, vous êtes probablement mieux d'utiliser printf ou vous devez vérifier les capacités des commandes d'écho avec quelque chose comme[ -n "$( echo -e )" ] && echo "sh stuff\c" || echo -e "bash stuff\c"
(au moins bash prend également en charge \ c, donc pas besoin d'utiliser le -n option, mais vous avez besoin du -e pour bash)Pour y parvenir, il existe essentiellement deux méthodes que j'utilise fréquemment:
1. Utilisation du caractère d'échappement du curseur (
\c
) avececho -e
Exemple :
-e
flag active les caractères E scape dans la chaîne.\c
ramène le C urseur à la ligne actuelle.OU
2. Utilisation de la
printf
commandeExemple :
la source
Si vous utilisez echo à l'intérieur d'un if avec d'autres commandes, comme "read", il peut ignorer le paramètre et il sautera quand même sur une nouvelle ligne.
la source
Juste pour le linux le plus populaire
Ubuntu
et c'estbash
:Vérifiez quel shell utilisez-vous? Surtout ci-dessous fonctionne, sinon voyez ceci :
echo $0
Si les impressions ci-dessus
bash
, alors ci-dessous fonctionnera:printf "hello with no new line printed at end"
OU
echo -n "hello with no new line printed at end"
la source
Je crois en ce moment votre impression de sortie comme ci-dessous
Vous pouvez utiliser
xargs
pour placer la sortie standard multiligne sur la même ligne.la source
Lorsque vous allez écrire votre script shell, mettez toujours la première ligne sous #! / Usr / bin / env bash. Ce shell n'omet ni ne manipule les séquences d'échappement. ex echo "Ceci est la première \ n ligne" imprime Ceci est la première \ n ligne.
la source
la source