como faço para ecoar $ something >> file.txt sem retorno de carro?

81

Quando eu echo $something >> file.txt, uma nova linha será anexada ao arquivo.

E se eu quiser acrescentar sem uma nova linha?

onemach
fonte
3
Tenha cuidado echo $something, o comportamento dele depende da IFSvariável e você pode acabar com o caráter de desaparecimento. Você pode tentar o seguinte: var="hello world"; echo $var(dois espaços entre olá e mundo) ou var="hello world"; IFS='l'; echo $varou var="-e hello \\n world"; echo $var. Para resolver isso, coloque aspas duplas em torno da variável assim:, echo "$var"ou use printf.
Jfg956

Respostas:

96

É para isso que echo -nserve.

Ignacio Vazquez-Abrams
fonte
4
Existe um equivalente para cat? (por exemplo, quando você tem um arquivo something.txtem vez de uma variável $something)
cboettig
11
@cboettig: Não. Use uma ferramenta diferente para imprimir tudo, menos a nova linha final.
Ignacio Vazquez-Abrams
@cboettig, cat não adiciona nada à saída por padrão, então não há necessidade de um parâmetro '-n' para cat. por exemplo, se o arquivo não tem uma linha termina na última linha, em seguida, o prompt shell será impresso logo após o último caractere do arquivo e não em uma nova linha
Rondo
41

printfé muito flexível e mais portátil que echo. Como nas implementações C / Perl / etc, se você não finalizar a sequência de formatação com \nnenhuma nova linha será impressa:

printf "%s" "$something" >> file.txt
Glenn Jackman
fonte
7

Se você estiver usando a saída do comando, poderá usar xargs em combinação com echo

/sbin/ip route|awk '/default/ { print $3 }' | xargs echo -n >> /etc/hosts
zainengineer
fonte
0

tr é outra alternativa.

Se você estiver usando echocomo sua entrada, pode se safar de qual tr -d '\n'.

Essa técnica também funciona ao canalizar a saída de outros comandos (com apenas uma única linha de saída). Além disso, se você não sabe se os arquivos têm terminações de linha UNIX ou DOS, você pode usar tr -d '\n\r'.

Aqui estão alguns testes mostrando que isso funciona.

Nova linha incluída:

something='0123456789' ; echo ${something} | wc -c
11

Nova linha do UNIX:

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 tre GNU tr.

Nic Doye
fonte