Другие ответы содержат альтернативные решения. (Мне особенно нравится расширение параметра один.)
Вот что не так с вашей попыткой:
В
echo $EXT_DESCR | sed 's/\\n/\n/g'
команда sed указана в одинарных кавычках, поэтому sed получает s/\\n/\n/g
как есть.
В
NEW_DESCR=`echo $EXT_DESCR | sed 's/\\n/\n/g'`
вся команда указана в обратных кавычках, поэтому применяется раунд обработки обратной косой черты. Это приводит к тому, что sed получает код s/\n/\n/g
, который ничего не делает.
Возможное исправление для этого кода:
NEW_DESCR=`echo $EXT_DESCR | sed 's/\\\\n/\\n/g'`
Удвоив обратную косую черту, мы получаем правильную команду в sed.
или (проще):
NEW_DESCR=$(echo $EXT_DESCR | sed 's/\\n/\n/g')
Вместо обратных галочек используйте $( )
, у которого меньше эзотерических правил побега.
Примечание: не используйте ALL_UPPERCASE
для переменных оболочки. UPPERCASE
(неофициально) зарезервировано для системных переменных, таких как HOME
, и специальных встроенных переменных, таких как IFS
или RANDOM
.