2009-05-29 9 views
16

Vielleicht am einfachsten mit einem Beispiel zu erklären:sh Lesebefehl isst Schrägstriche in der Eingabe?

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

Es scheint, dass die „Lese“ Befehl, um die Schrägstriche in der Eingabe als Fluchten interpretiert und sie zu entfernen. Ich muss eine Datei Zeile für Zeile verarbeiten, ohne ihren Inhalt zu ändern, und ich bin mir nicht sicher, wie ich hier aufhören kann, intelligent zu sein. Irgendwelche Ideen?

Antwort

28

accrding zu: http://www.vias.org/linux-knowhow/bbg_sect_08_02_01.html:

-r
Wenn diese Option angegeben wird, Backslash wirkt nicht als Escape-Zeichen. Der Backslash wird als Teil der Zeile betrachtet. Insbesondere kann ein Backslash-Newline-Paar nicht als als Zeilenfortsetzung verwendet werden.

Es funktioniert auf meiner Maschine.

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

Super, danke! Ich fühle mich dumm, dass ich die Dokumentation dafür nicht gefunden habe, aber es ist eines der Dinge, die schwer zu finden sind, weil die Begriffe eher generisch sind :( –

+0

Btw, welche Shell verwendest du nicht, die -r? Ich bin bash. –

+0

Sorry, ich war Fräulein used Copy Paste. Bearbeiten ... –

5

Verwenden read -r, wie pro http://www.ss64.com/bash/read.html:

-r
Wenn diese Option angegeben wird, Backslash wirkt nicht als Escape-Zeichen.

+0

Danke Alex, leider kann ich nur eins als Antwort markieren und Zsolt schlägt dich um eine Minute :) –

+0

Heh, ich weiß, SO ist ein 100-Meter-Rennen für die meisten Fragen! -) –