Я хочу заменить \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, особенно в разделе "Использование приложения".