2012-04-20 35 views
5

tôi có mã như thế này, mà xử lý một tập tin CSV:Tại sao dấu gạch chéo ngược biến mất khi chạy qua tiếng vọng?

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

Nếu tập tin CSV chứa bất kỳ \, khi tôi chạy lệnh này, các văn bản đầu ra không hiển thị \.

Làm cách nào để đảm bảo rằng \ không bị xóa?

+0

Hãy thử với dấu ngoặc kép: '" $ (echo "$ line" | awk -F, '{print $ 2}') "' – C2H5OH

+0

Đó là dấu gạch chéo ngược. Bắt đầu từ phía dưới. –

Trả lời

13

Lý do cho hành vi này là sử dụng nội dung \ làm ký tự thoát. Cờ -r vô hiệu hóa hành vi này.

Vì vậy, điều này sẽ làm việc:

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

Bạn cũng nên đặt "..." xung quanh những thứ như $(...) và các biến, giống như

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

Ngoài ra, 'cut -d, -f2' có thể được sử dụng thay cho lệnh' awk' đó. – Zash

+0

Đề xuất 'read -r' của bạn cũng hoạt động đối với câu hỏi ngược lại của tôi về cách xóa \ trong khi lặp lại, vì vậy cảm ơn! –

1

Các trang người đàn ông cho bash có này để nói về read:

Nhân vật xuyệc ngược (\) có thể sử dụng để loại bỏ bất kỳ ý nghĩa đặc biệt đối với các ký tự tiếp theo đọc và cho tiếp tục dòng.

Các vấn đề liên quan