Читать переменные построчно, не заглатывая символ \

Я использую этот фрагмент, чтобы читать переменные построчно:

echo "${lines}" | while read line; do something with ${line}; done

lines содержит новые строки и вхождения \ характер (line будет интерпретироваться как C строка). К сожалению, где-то в этом коде \ персонажи просто раздеты. Почему и как мне это исправить?

РЕДАКТИРОВАТЬ: образец ввода это:

foo $'bar'
fee $'ber\fbir'

обратите внимание, что только \ раздели, а не $'' который будет использоваться позже, чтобы интерпретировать строку как C строка.

1 ответ

Решение

Вы можете избежать \ символы, так что они все еще присутствуют в вашем read line, как это:

echo "${lines}" | sed 's/\\/\\\\/g' | while read line; do something with ${line}; done

ОБНОВЛЕНИЕ: Я только что обновил строку sed выше после некоторого тестирования, попробуйте сейчас, это работает для меня.

ОБНОВЛЕНИЕ 2: Поскольку, кажется, Джорданм удалил свой ответ, который использовал лучший подход, чем мой, я добавлю его здесь сам:

С использованием -r параметр к read команда, он инструктирует его не избегать слэшей, так что это также сработает:

echo "${lines}" | while read -r line; do something with ${line}; done
Другие вопросы по тегам