hoe echo ik $something >> file.txt zonder carriage return?
Als ik echo $something >> file.txt
doe, wordt er een nieuwe regel aan het bestand toegevoegd.
Wat als ik wil appen zonder een nieuwe regel?
Als ik echo $something >> file.txt
doe, wordt er een nieuwe regel aan het bestand toegevoegd.
Wat als ik wil appen zonder een nieuwe regel?
Dat is waar echo -n
voor is.
printf
](http://www.gnu.org/software/bash/manual/bashref.html#index-printf-141) is erg flexibel en meer portable dan echo
. Net als bij de C/Perl/etc implementaties, wordt er geen newline afgedrukt als je de format string niet afsluit met \n
:
printf "%s" "$something" >> file.txt
Als je de uitvoer van commando’s gebruikt, kun je xargs gebruiken in combinatie met echo
/sbin/ip route|awk '/default/ { print $3 }' | xargs echo -n >> /etc/hosts
tr
is een ander alternatief.
Als je echo
als invoer gebruikt, kun je wegkomen met tr -d '\n'
.
Deze techniek werkt ook bij het pipen in uitvoer van andere commando’s (met slechts een enkele regel uitvoer). Bovendien, als je niet weet of de bestanden UNIX of DOS regeleinden hebben, kun je tr -d '\n\r'
gebruiken.
Hier zijn wat tests die laten zien dat dit werkt.
Newline included:
something='0123456789' ; echo ${something} | wc -c
11
UNIX newline:
something='0123456789' ; echo ${something} | tr -d '\n\r' | wc -c
10
DOS style:
something='0123456789' ; echo ${something} | unix2dos | tr -d '\n\r' | wc -c
10
Getest met BSD tr
en GNU tr
.