2012-04-20 9 views
5

que tienen un código como éste, que procesa un archivo CSV:¿Por qué desaparecen las barras diagonales inversas cuando se ejecutan a través del eco?

#!/bin/bash 
while read line 
do 
    variable=$(echo $line | awk -F, '{print $2}') 
    echo $variable 
done < ./file.csv 

Si el archivo CSV contiene ninguna \, cuando ejecuto este comando, el texto de salida no muestra la \.

¿Cómo puedo asegurarme de que \ no se elimine?

+0

Pruebe con comillas dobles: '" $ (echo "$ line" | awk -F, '{print $ 2}') "' – C2H5OH

+0

Eso es una barra diagonal inversa. Comienza desde abajo. –

Respuesta

13

La razón de este comportamiento es que el read incorporado utiliza \ como carácter de escape. El indicador -r deshabilita este comportamiento.

Por lo tanto, esto debería funcionar:

while read -r line 
    variable=$(echo $line | awk -F, '{print $2}') 
    echo $variable 
done < ./file.csv 

También debe colocar "..." torno a cosas como $(...) y las variables, como

variable="$(command)" 
echo "$variable" 
+2

Además, 'cut -d, -f2' se puede usar en lugar de ese comando' awk'. – Zash

+0

Tu sugerencia 'read -r' también funciona para mi pregunta opuesta sobre cómo eliminar los bucles \ in while, ¡así que gracias! –

1

La página del manual para bash tiene esto que decir acerca read:

El carácter de barra invertida (\) puede ser utilizado para eliminar ningún significado especial para el próximo carácter leído y como continuación de línea.

Cuestiones relacionadas