Первый вопрос:
echo 'abcd123' фактически выводит 'abcd123\n' на стандартный вывод. А для tr -c 'a-z' '0-9' опция -c означает, что для перевода будет использоваться дополнение к 'a-z' , см. Справочную страницу tr .
Гораздо больше символов, кроме «az», соответствуют «0-9», поэтому оставшийся символ 'abcd123\n' , исключая строчные буквы, то есть '123\n' , будет переведен в '9999' . Таким образом, результатом является 'abcd9999', с последующим '\n'.
Второй вопрос очень прост:
echo hello 1 char 2 next 4 распечатать hello 1 char 2 next 4\n to stdout. 'tr -d -c '0-9 \n'' удаляет каждое дополнение числа '0-9' символа пробела и '\n'.
Вот почему оставшийся символ содержит цифры и пробелы и, между прочим, завершающий символ '\n'.