Команда tr
обрабатывает все символы, включая непечатные.
echo
в вашем примере производит вывод, состоящий из двух символов:
a
- символ новой строки (
\n
)
В вашем вызове вы приказали tr
заменить все символы, которые дополняют a
(простыми словами: кроме a
) на b
, поэтому:
- он оставил характер нетронутыми
- заменил символ новой строки на
a
.
Попробуйте протестировать его с помощью printf
(который не добавляет в конец новую строку, как это делает echo
)
Это приводит к тому же вводу для tr
что и к echo
, поэтому вывод также тот же:
printf "a\n" | tr -c a b
ab[~]#
Сравнить с:
printf "a" | tr -c a b
a[~]#
А также:
printf "a\n\n" | tr -c a b
abb[~]#