Команда sh read ест косые черты на входе? - PullRequest
23 голосов
/ 29 мая 2009

Пожалуй, проще всего объяснить на примере:

$ echo '\&|'
\&|
$ echo '\&|' | while read in; do echo "$in"; done
&|

Кажется, что команда "read" интерпретирует косые черты во входных данных как escape-символы и удаляет их. Мне нужно построчно обрабатывать файл, не меняя его содержимого, и я не уверен, как остановить умное чтение. Есть идеи?

Ответы [ 2 ]

37 голосов
/ 29 мая 2009

По: http://www.vias.org/linux-knowhow/bbg_sect_08_02_01.html:

-r
Если эта опция задана, обратная косая черта не действует как escape-символ. Обратная косая черта считается частью линии. В частности, пара с обратной косой чертой не может быть использована как продолжение строки.

Это работает на моей машине.

$ echo '\&|' | while read -r in; do echo "$in"; done
\&|
6 голосов
/ 29 мая 2009

Использование read -r согласно http://www.ss64.com/bash/read.html:

-r
Если указан этот параметр, обратная косая черта не является escape-символом.

...