Se eu tiver o arquivo que input.txt
contém:
hello
world
!
A execução do comando bash echo $(cat input.txt)
produzirá o seguinte:
hello world !
Por que e como posso corrigi-lo para gerar exatamente o que está no arquivo, como está no arquivo?
command-line
bash
f.ardelian
fonte
fonte
echo "$(date) something"
retirar a nova linha à direita da saída da data, tornando esse eco a saída da data e "algo" na mesma linha. Se você precisar armazenar um arquivo ou saída de comando "como está", use mapfile (help mapfile
)read -rd ''
ou um loop de leitura while.Citado na página do manual do bash, seção
Command Substitution
:Um pouco mais, mesma seção:
É por isso que
echo "$(cat /etc/passwd)"
funciona.Além disso, é preciso estar ciente de que a substituição de comandos pelas especificações POSIX remove as novas linhas finais:
Portanto, a saída de um arquivo via
$(cat file.txt)
pode levar à perda de novas linhas finais, e isso pode ser um problema se a integridade total do arquivo for prioritária.fonte
Você pode preservar novas linhas, por exemplo, configurando o IFS para vazio:
fonte