tr
processa todos os caracteres, incluindo os não-imprimíveis.
echo
no seu exemplo produz uma saída composta por dois caracteres:
-
a
- caractere de nova linha (
\n
)
Em sua chamada, você solicitou tr
para substituir todos os caracteres que complementam a
(em palavras simples: diferente de a
) por b
, portanto:
- deixou o caractere
a
intacto - substituiu o caractere de nova linha por
b
.
Considere testá-lo com printf
(que não inclui implicitamente uma nova linha no final, como echo
)
Isso produz a mesma entrada para tr
como echo
, então a saída também é a mesma:
printf "a\n" | tr -c a b
ab[~]#
Compare com:
printf "a" | tr -c a b
a[~]#
E:
printf "a\n\n" | tr -c a b
abb[~]#