Respostas:
É para isso que echo -n
serve.
cat
? (por exemplo, quando você tem um arquivo something.txt
em 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 \n
nenhuma 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 echo
como 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 tr
e GNU tr
.
echo $something
, o comportamento dele depende daIFS
variá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 $var
ouvar="-e hello \\n world"; echo $var
. Para resolver isso, coloque aspas duplas em torno da variável assim:,echo "$var"
ou useprintf
.