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
aintacto - 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[~]#