2012-08-29 40 views
4

我使用Bash腳本從文本文件中逐行讀取,該文本文件中包含特殊字符(正則表達式)。當我使用echo "${SOME_VAR}"時,它不會像那樣顯示文本Bash在腳本中攔截通配符

我熟悉Prevent * to be expanded in the bash script

如何顯示和使用文本?

UPDATE 文本(TSV)文件包含類似的元組(最後一個條目是psql的查詢)

bathroom bathroom select name from photos where name ~* '\mbathroom((s)?|(''s)?)\M'; 

我讀了CSV如下:

tail -n+2 text.file | while IFS=$'\t' read x y z 
do 
    echo "${z}" 
done 

這給出輸出

select name from photos where name ~* 'mbathroom((s)?|(''s)?)M'); 

注意 '\' 丟失

+2

向我們展示您的輸入和一些代碼請 –

+0

@Fredrik請參閱我的更新。 – MrRoth

+0

「tail」過程的替代方法(避免可能導致子外殼問題的管道)將會是{{read;讀;而IFS = $'\ t'read z y z;做...;完成; } chepner

回答

3

嘗試使用-r標誌與read

tail -n+2 text.file | while IFS=$'\t' read -r x y z 
do 
    echo "${z}" 
done 

read手冊頁:

-r不以任何治療反斜槓字符特殊的方式。考慮每個反斜槓是輸入行的一部分。

+0

我不能相信我錯過了。謝謝! – MrRoth