Читать переменные построчно, не заглатывая символ \
Я использую этот фрагмент, чтобы читать переменные построчно:
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