2009-05-29 9 views
16

plus facile à expliquer peut-être un exemple:sh commande de lecture mange des barres obliques dans l'entrée?

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

Il semble que la commande « lire » interprète les barres obliques dans l'entrée comme les évasions et les enlever. J'ai besoin de traiter un fichier ligne par ligne sans changer son contenu et je ne sais pas comment arrêter de lire ici. Des idées?

Répondre

28

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

-r
Si cette option est donnée, la barre oblique inverse ne fonctionne pas comme un caractère d'échappement. La barre oblique inverse est considérée comme la partie de la ligne. En particulier, une paire backslash-newline ne peut pas être utilisée en tant que continuation de ligne.

Fonctionne sur ma machine.

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

Génial, merci! Je me sens bête de ne pas avoir trouvé la documentation pour cela, mais c'est une de ces choses qui est difficile à chercher parce que les termes sont plutôt génériques :( –

+0

Btw, quel shell utilisez-vous qui ne nécessite pas le -r? Je suis en utilisant bash –

+0

Désolé, je me suis trompé de copier coller ... –

5

Utilisation read -r, selon http://www.ss64.com/bash/read.html:

-r
Si cette option est donnée, la barre oblique inverse ne fonctionne pas comme un caractère d'échappement.

+0

Merci Alex Malheureusement, je ne peux en marquer qu'une comme réponse et Zsolt vous a battu d'une simple minute :) –

+0

Hé, je sais, c'est une course de 100 mètres pour la plupart des questions! –