2012-03-01 08:25:33 +0000 2012-03-01 08:25:33 +0000
84
84

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?

Antwoorden (4)

98
98
98
2012-03-01 08:28:15 +0000

Dat is waar echo -n voor is.

42
42
42
2012-03-01 14:42:29 +0000

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
7
7
7
2016-12-14 07:52:48 +0000

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
0
0
0
2017-05-11 11:41:20 +0000

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.