2009-05-29 15 views
16

Być może najłatwiej wyjaśnić na przykładzie:Polecenie sh read zjada ukośniki na wejściu?

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

Wydaje się, że „czytać” polecenia interpretacji ukośniki w wejściu jak ucieka i jest ich usunięcie. Muszę przetworzyć plik wiersz po wierszu bez zmiany jego zawartości i nie jestem pewien, jak przerwać czytanie z bycia sprytnym tutaj. Jakieś pomysły?

Odpowiedz

28

Accrding do: http://www.vias.org/linux-knowhow/bbg_sect_08_02_01.html:

-r
Jeśli ta opcja jest podana, odwrotny ukośnik nie działa jako znak ucieczki. Odwrotny ukośnik jest uważany za część linii. W szczególności nie można użyć pary ukośnikowo-tylny-nowy wiersz jako przedłużenie linii.

Działa na moim komputerze.

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

Niesamowite, dzięki! Czuję się głupio, ponieważ nie znalazłem dokumentacji do tego, ale jest to jedna z tych rzeczy, które trudno jest wyszukać, ponieważ terminy są dość ogólne :( –

+0

Btw, z której powłoki korzystasz, nie wymagaj -r? używając bash. –

+0

Przepraszam, brakowało mi użyć wklejania do kopiowania. Edycja ... –

5

Zastosowanie read -r, zgodnie http://www.ss64.com/bash/read.html:

-r
Jeśli ta opcja jest podana, odwrotny ukośnik nie działa jako znak ucieczki.

+0

Dzięki Alex, niestety mogę tylko oznaczyć jedno jako odpowiedź, a Zsolt pokonał cię zaledwie minutę :) –

+0

Heh, wiem, SO to 100-metrowy wyścig dla większości pytań! -) –