2012-04-20 47 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 2012-04-20 00:22:24

+0

這是一個反斜槓。從底部開始。 – 2012-04-20 00:24:44

回答

13

此行爲的原因是read內建使用\作爲轉義字符。 -r標誌禁用此行爲。

所以,這應該工作:

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

你也應該把周圍的事物,像$(...)和變量"...",像

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

此外,可以使用'cut -d,-f2'來代替'awk'命令。 – Zash 2012-04-21 16:25:19

+0

您的''r''''建議也適用於我在while循環中刪除\的相反問題,所以謝謝! – 2014-05-07 22:09:31

1

的手冊頁bash具有這樣說read

反斜槓字符(\)可以用來刪除任何特殊含義下一個字符 閱讀 和續行。