Question Comment faire écho à $ quelque chose >> file.txt sans retour chariot?


Quand je echo $something >> file.txt, une nouvelle ligne sera ajoutée au fichier.

Et si je veux ajouter sans nouvelle ligne?


67
2018-03-01 08:25


origine


Faire attention echo $something, son comportement dépend de la IFS variable, et vous pourriez vous retrouver avec un personnage en voie de disparition. Vous pouvez essayer ce qui suit: var="hello world"; echo $var (deux espaces entre bonjour et monde) ou var="hello world"; IFS='l'; echo $var ou var="-e hello \\n world"; echo $var. Pour résoudre cela, placez des guillemets doubles autour de la variable comme ceci: echo "$var", Ou utiliser printf. - jfg956


Réponses:


C'est ce que echo -n est pour .


80
2018-03-01 08:28



Y a-t-il un équivalent pour cat? (par exemple lorsque vous avez un fichier something.txt plutôt qu'une variable $something) - cboettig
@cboettig: Non. Utilisez un autre outil pour imprimer tout sauf le nouveau trait final. - Ignacio Vazquez-Abrams
@cboettig, cat n'ajoute rien à la sortie par défaut, il n'y a donc pas besoin de paramètre '-n' pour cat. Par exemple, si votre fichier n'a pas de fin de ligne dans la dernière ligne, l'invite de votre shell sera imprimée juste après le dernier caractère du fichier et non dans une nouvelle ligne. - Rondo


printf est très flexible et plus portable que echo. Comme les implémentations C / Perl / etc, si vous ne terminez pas la chaîne de format avec \n alors aucune nouvelle ligne n'est imprimée:

printf "%s" "$something" >> file.txt

36
2018-03-01 14:42





Si vous utilisez la sortie de la commande, vous pouvez utiliser xargs en combinaison avec echo

/sbin/ip route|awk '/default/ { print $3 }' | xargs echo -n >> /etc/hosts

6
2017-12-14 07:52





tr est une autre alternative.

Si vous utilisez echo comme votre entrée, vous pouvez vous en sortir qui tr -d '\n'.

Cette technique fonctionne également lorsque vous utilisez des commandes provenant d'autres commandes (avec une seule ligne de sortie). De plus, si vous ne savez pas si les fichiers ont des fins de ligne UNIX ou DOS, vous pouvez utiliser tr -d '\n\r'.

Voici quelques tests montrant que cela fonctionne.

Newline inclus:

something='0123456789' ; echo ${something} | wc -c
11

UNIX newline:

something='0123456789' ; echo ${something} | tr -d '\n\r' | wc -c
10

Style DOS:

something='0123456789' ; echo ${something} | unix2dos | tr -d '\n\r' | wc -c
10

Testé avec BSD tr et GNU tr.


0
2018-05-11 11:41