Я хочу заменить \n символом.
echo -n "s\n" |tr "\n" "a"
s\n
Почему нельзя получить sa в результате?
От man echo
:
-e
включить интерпретацию обратной косой черты
Ваше эхо может быть встроенным в оболочку (попробуйте type echo
). Если это так, используйте help echo
вместо man echo
. Но это должно сказать то же самое о опции -e
.
Без этой опции строка \n
печатается буквально, а не как перевод строки. Обратите внимание, что tr
требует специальной опции для работы, как вы ожидаете.
Исправлена команда:
echo -ne "s\n" | tr "\n" "a"
Товарищ пользователь Гордон Дэвиссон указал на некоторые вещи. Они кажутся достаточно важными, чтобы включить их в мой ответ для дальнейшего использования. С этого момента вся заслуга Гордона.
Различные версии
echo
очень противоречивы в отношении экранирования и опций. Некоторые интерпретируют escape-последовательности без-e
. Некоторые выводят «-e» как часть своего вывода. Некоторые делают ... другие вещи. Для таких вещей, используйте вместо этогоprintf
(как вprintf "s\n"
). Смотрите спецификацию POSIX дляecho
, особенно в разделе "Использование приложения".