2009-05-29 6 views
16

Возможно, проще всего объяснить на примере:Команда sh read ест косую черту во входе?

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

Похоже, что «читать» команда интерпретирует косые черты на входе в побегах и их удаление. Мне нужно обработать файл строки за строкой, не меняя его содержимого, и я не уверен, как остановить чтение от умных здесь. Есть идеи?

ответ

28

виду наиболее: http://www.vias.org/linux-knowhow/bbg_sect_08_02_01.html:

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

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

$ echo '\&|' | while read -r in; do echo "$in"; done 
\&| 
+1

Удивительно, спасибо! Я чувствую себя немым из-за того, что не нашел документацию для этого, но это одна из тех вещей, которые трудно найти, потому что термины довольно общие :( –

+0

Btw, какая оболочка вы используете, что не требует -r? используя bash. –

+0

Извините, мне не хватало использованной копии. Редактирование ... –

5

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

-r
Если эта опция задана, обратная косая черта не выступает в качестве экранирующего символа.

+0

Спасибо Alex. К сожалению, я могу отметить только один ответ, а Zsolt избил вас одной минутой :) –

+0

Хе-хе, я знаю, SO - 100-метровая гонка для большинства вопросов! -) –