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

jak zrobić echo $something >> plik.txt bez powrotu karetki?

Kiedy ja echo $something >> file.txt, nowa linia zostanie dołączona do pliku.

Co jeśli chcę dopisać plik bez nowej linii?

Odpowiedzi (4)

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

Po to właśnie jest echo -n .

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

printf ](http://www.gnu.org/software/bash/manual/bashref.html#index-printf-141) jest bardzo elastyczne i bardziej przenośne niż echo. Podobnie jak w implementacjach C/Perl/etc, jeśli nie zakończysz łańcucha formatu znakiem \n, to nie jest wypisywana nowa linia:

printf "%s" "$something" >> file.txt
7
7
7
2016-12-14 07:52:48 +0000

Jeśli używasz wyjścia komendy, możesz użyć xargs w połączeniu z echo

/sbin/ip route|awk '/default/ { print $3 }' | xargs echo -n >> /etc/hosts
```.
0
0
0
2017-05-11 11:41:20 +0000

tr jest inną alternatywą.

Jeśli używasz echo jako wejścia, możesz zrezygnować z tr -d '\n'.

Ta technika działa również przy przesyłaniu danych wyjściowych z innych poleceń (z tylko jednym wierszem wyjścia). Ponadto, jeśli nie wiesz, czy pliki mają UNIX-owe czy DOS-owe zakończenia linii, możesz użyć tr -d '\n\r'.

Tutaj jest kilka testów pokazujących, że to działa.

Dołączona nowa linia:

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

Przetestowane z BSD tr i GNU tr.