如何在bash中单引号SQL字符串中转义单引号?

时间:2015-10-03 17:38:13

标签: regex bash shell sed

我正在尝试修复this crude script中的一个错误,该错误会阻塞包含单引号的目录名称。有一个similar question,但它只能逃脱一个单引号。

SQL查询如下所示:

SELECT arc_no, password, status FROM summary WHERE arc_no = (SELECT name FROM dir_tree WHERE node_id = (SELECT parent_id FROM dir_tree WHERE name = '${bash_args[0]}'))::BIGINT
SELECT arc_no, password, status FROM summary WHERE descr = '${bash_args[0]}'
INSERT INTO summary (arc_no, act_size, dirs, files, status, password, descr) VALUES ('$arc_no', '${s_d_f[0]}', '${s_d_f[1]}', '${s_d_f[2]}', 'packing', '$a_pwd', '${bash_args[0]}')

因此名为“A的文件涉及B的工作”的目录将生成:

SELECT arc_no, password, status FROM summary WHERE descr = 'A's files concerning B's work'

这会引发语法错误。

要得到这个:

SELECT arc_no, password, status FROM summary WHERE descr = 'A''s files concerning B''s work'

我可以使用sed并可能覆盖以单引号开头或结尾的目录名吗?或者我使用更复杂的语言如python?

1 个答案:

答案 0 :(得分:1)

只需更换扩展

即可
${bash_args[0]}

${bash_args[0]//\'/\'\'}

请参阅Shell Parameter Expansion in the reference manual

与其他变量类似:替换

$arc_no

通过

${arc_no//\'/\'\'}