Respostas:
É para isso que echo -nserve.
cat? (por exemplo, quando você tem um arquivo something.txtem vez de uma variável $something)
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
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
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.
echo $something, o comportamento dele depende daIFSvariá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) ouvar="hello world"; IFS='l'; echo $varouvar="-e hello \\n world"; echo $var. Para resolver isso, coloque aspas duplas em torno da variável assim:,echo "$var"ou useprintf.