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.