como faço eco de $something >> file.txt sem retorno de carruagem?
Quando I echo $something >> file.txt
, uma nova linha será anexada ao ficheiro.
E se eu quiser anexar sem uma nova linha?
Quando I echo $something >> file.txt
, uma nova linha será anexada ao ficheiro.
E se eu quiser anexar sem uma nova linha?
É para isso que serve o echo -n
.
printf
é muito flexível e mais portátil do que echo
. Tal como as implementações C/Perl/etc, se não terminar a string de formato com \n
então nenhuma nova linha é impressa:
printf "%s" "$something" >> file.txt
Se estiver a utilizar a saída do comando, pode utilizar xargs em combinação com echo
/sbin/ip route|awk '/default/ { print $3 }' | xargs echo -n >> /etc/hosts
tr
é outra alternativa.
Se estiver a usar echo
como sua entrada, pode escapar qual tr -d '\n'
.
Esta técnica também funciona quando se canaliza a saída de outros comandos (com apenas uma única linha de saída). Além disso, se não souber se os ficheiros têm terminações de linha UNIX ou DOS, pode usar tr -d '\n\r'
.
Aqui estão alguns testes que mostram que isto funciona.
Nova linha incluída:
something='0123456789' ; echo ${something} | wc -c
11
UNIX nova linha:
something='0123456789' ; echo ${something} | tr -d '\n\r' | wc -c
10
estilo DOS:
something='0123456789' ; echo ${something} | unix2dos | tr -d '\n\r' | wc -c
10
Testado com BSD tr
e GNU tr
.