使用带引号的bash变量,忽略带引号的文件名

时间:2017-08-10 08:58:29

标签: bash variables

我运行一个简单的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

我已经尝试了我能想到的每一个引号组合,当然还有搜索,但我找不到任何有效的方法。

2 个答案:

答案 0 :(得分:1)

您可以使用:

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

而不是

'$variable'

这将逃脱这样的单引号:

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

可能因为它当然取决于my_command

答案 1 :(得分:0)

你应该能够用反斜杠转义there_are_12\'\'_in_a_foot

dplyr