Я хочу заменить \n символом.

echo -n  "s\n" |tr  "\n"  "a"
s\n

Почему нельзя получить sa в результате?

1 ответ1

2

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .