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

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?

Respostas (4)

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

É para isso que serve o echo -n.

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

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

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

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.