LINUX.ORG.RU

Убрать парсинг обратного слеша в шелл-функции read

 , ,


0

1
( echo "q\\"; echo "w" ) | ( read x; echo "$x" )

Выводит qw. Как сделать чтобы обратный слэш прочитался как просто символ, а следующий за ним перевод строки - как конец ввода (как было бы если б не слэш)?

В sh и в bash одинаково съедает слэш, вероятно это posix-поведение.

На всякий случай, а то вдруг кто неправильно поймёт вопрос: менять ввод нельзя, вопрос в том есть ли какие-то опции шеллу чтобы он начать правильно парсить именно такой ввод.

★★★★★

Последнее исправление: firkax (всего исправлений: 3)

Верное решение уже было предложено, поэтому моя очередь предложить альтернативное решение:

( echo "q\\"; echo "w" ) | ( x="$(awk '{print;exit}')"; echo -n "$x" )
kaldeon
()
Ответ на: комментарий от firkax

Выше уже указали решение.

Я против него ничего не имею. Просто с одинарными кавычками тот же результат:

 ~ $ ( echo "q\\"; echo "w" ) | ( read x; echo "$x" )
qw
 ~ $ ( echo 'q\\'; echo "w" ) | ( read x; echo "$x" )
q\
 ~ $ ( echo "q\\"; echo "w" ) | ( read -r x; echo "$x" )
q\
dmitry237 ★★★★★
()
Последнее исправление: dmitry237 (всего исправлений: 1)