2017-08-10 74 views
1

我運行需要像這樣圍繞一個多部分命令雙引號一個簡單的bash腳本文件名:使用帶引號的bash變量,忽略了引號

for i in /data/*; do 
    mycommand "first_directive ; second_directive $i" 
done 

要處理特殊字符,我把引號將變量,因此它看起來像這樣: "first_directive ; second_directive '$i'" 它的作用大部分,但我發現了一個邊緣情況。

當文件名中包含兩個單引號,如there_are_12''_in_a_foot它忽略了'',只是尋找there_are_12_in_a_foot

這裏是data文件夾的內容:

$ ls /data/ 
what_do_they_call_a_quarter_pounder 
they_use_the_metric_system 
there_are_12''_in_a_foot 

我已經試過各種組合我能想到的引號,當然還有搜索,但是我找不到任何有用的東西。

+0

'variable'的值有引號?更改變量名稱以使代碼易於理解 – Inian

+0

我認爲您所做的是正確的,在此無需更改。問題可能在於你正在調用的'mycommand'腳本。請提供具體的細節。 – Anubis

回答

1

您可以使用:

'${variable//\'/\'\\\'\'}' 

,而不是

'$variable' 

這將逃過單引號是這樣的:

'there_are_12'\'''\''_in_a_foot' 

因爲它DEPE當然nds my_command

+0

它的作品魅力 – jakethedog

+0

很高興看到它適合你。 – hek2mgl

0

你應該可以用反斜槓來跳過'

there_are_12\'\'_in_a_foot 
+0

沒錯,但是我如何在bash循環中做到這一點? – jakethedog

+0

是的..可能有點難。但你似乎現在有一個工作解決方案:) – gaderian