我正在尝试修复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?
答案 0 :(得分:1)
只需更换扩展
即可${bash_args[0]}
与
${bash_args[0]//\'/\'\'}
请参阅Shell Parameter Expansion in the reference manual。
与其他变量类似:替换
$arc_no
通过
${arc_no//\'/\'\'}