O comando:
bla='head -1 filename'
já remove a nova linha. O comando echo
anexa a nova linha novamente.
Tente:
echo "$bla\c"
(se você estiver usando um eco compatível com POSIX) e você verá que não há nova linha em $bla
.
Meu nextermCensus.lis
contém caracteres de nova linha e estou interessado apenas na primeira linha, gostaria de remover o caractere de nova linha. mas isso não funciona. então eu tenho que usar o segundo método para removê-lo. $(echo $census_day | tr -d '\n')
funciona como eu esperava. Mas eu realmente gosto de fazer isso em uma linha.
census_day='head -1 /dr4/home/operbat/batches/nextermCensus.lis | tr -d '\n''
census_day=$(echo $census_day | tr -d '\n')
O comando:
bla='head -1 filename'
já remove a nova linha. O comando echo
anexa a nova linha novamente.
Tente:
echo "$bla\c"
(se você estiver usando um eco compatível com POSIX) e você verá que não há nova linha em $bla
.
Por padrão, echo
adicionará uma nova linha à qualquer string ou variável que for enviada para impressão. Seu primeiro comando funciona perfeitamente, não há nova linha lá, a substituição de comando ( '...'
ou seu equivalente moderno $(...)
) retira todo caractere de nova linha à direita. Só é adicionado se você tentar echo
da variável.
Então, por exemplo, dado este arquivo:
$ cat foo.txt
a
b
c
Eu poderia salvar a primeira linha, excluindo a nova linha, usando apenas head
:
$ census_day='head -n 1 foo.txt'
Agora, se você fosse echo
, você veria uma nova linha, mas se usasse printf
ou echo -n
(para echo
s que a suportam) você não faria isso:
$ printf %s "$census_day" | od -tc
0000000 a
0000001
Tags pipe tr head command-substitution