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?
Kiedy ja echo $something >> file.txt
, nowa linia zostanie dołączona do pliku.
Co jeśli chcę dopisać plik bez nowej linii?
Po to właśnie jest echo -n
.
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
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
```.
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
.