Réponses:
C'est pour ça echo -n
.
cat
? (par exemple lorsque vous avez un fichier something.txt
plutôt qu'une variable $something
)
printf
est très flexible et plus portable que echo
. A l'instar des implémentations C / Perl / etc, si vous ne terminez pas la chaîne de formatage avec \n
aucune nouvelle ligne n'est imprimée:
printf "%s" "$something" >> file.txt
Si vous utilisez le résultat de la commande, vous pouvez utiliser xargs en combinaison avec echo
/sbin/ip route|awk '/default/ { print $3 }' | xargs echo -n >> /etc/hosts
tr
est une autre alternative.
Si vous utilisez echo
votre entrée, vous pouvez vous échapper tr -d '\n'
.
Cette technique fonctionne également lors de l’ajout de sorties à partir 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 les 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
.
echo $something
, son comportement dépend de laIFS
variable et vous risquez de vous retrouver avec un caractère qui disparaît. Vous pouvez essayer ce qui suit:var="hello world"; echo $var
(deux espaces entre hello et world) ouvar="hello world"; IFS='l'; echo $var
orvar="-e hello \\n world"; echo $var
. Pour résoudre ce problème, mettez des guillemets doubles autour de la variable comme ceci:,echo "$var"
ou utilisezprintf
.