A primeira pergunta:
echo 'abcd123'
na verdade imprime 'abcd123\n'
para stdout. E para tr -c 'a-z' '0-9'
, a opção -c
significa que o complemento de 'a-z'
será usado para a tradução, consulte man page de tr
.
Há muito mais caractere excluindo 'a-z' correspondente a '0-9', portanto, o caractere restante de 'abcd123\n'
, excluindo caractere minúsculo, que é '123\n'
, será traduzido como '9999'
. Então, o resultado é 'abcd9999', com o trailing '\ n'.
A segunda pergunta é muito simples:
echo hello 1 char 2 next 4
print hello 1 char 2 next 4\n
para stdout. O 'tr -d -c '0-9 \n''
exclui todos os complementos de '0-9'
number e space character e '\ n'.
É por isso que o caractere restante contém números e espaços e, a propósito, um caractere '\ n'.