2017-08-10 80 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