2012-04-20 4 views
5

У меня есть такой код, который обрабатывает файл CSV:Почему обратная косая черта исчезает при прохождении эха?

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

Если файл CSV содержит любой \, когда я запускаю эту команду, выходной текст не показывает \.

Как я могу гарантировать, что \ не удаляется?

+0

Попробуйте двойные кавычки: '" $ (эхо "$ строка" | awk -F, '{print $ 2}') "' – C2H5OH

+0

Это обратная косая черта. Начните снизу. –

ответ

13

Причиной такого поведения является то, что read использует встроенный \ в качестве экранирующего символа. Флаг -r отключает это поведение.

Таким образом, это должно работать:

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

Вы также должны поместить "..." вокруг вещей, как $(...) и переменные, как

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

Кроме того, вместо этой команды 'awk' можно использовать' cut -d, -f2'. – Zash

+0

Ваше предложение 'read -r' также работает для моего противоположного вопроса о том, как удалить \ in while loop, так что спасибо! –

1

Человек страница bash это сказать о read:

Символ обратной косой черты (\) может быть используется для удаления каких-либо особое значение для следующего символа чтения и для продолжения строки.