3

我编写了一个 bash 脚本来将值插入sqlite数据库。命令如下

sqlite3 ${db_name} "insert into ${table_name} (${column1},${column2}) values ('$f1','$f2');"

此命令工作正常,直到f1变量包含单引号

# e.g f1="I'm just kidding"
# the command reported error
Error: near "m": syntax error

有人可以告诉我如何逃避变量内的单引号吗?任何建议表示赞赏。谢谢!

4

3 回答 3

4

要转义 SQL 的单引号,请将其加倍(https://www.sqlite.org/faq.html#q14):

$ f1="I'm just kidding"
$ echo "${f1//\'/''}"
I''m just kidding
$ f2="no single quotes"
$ echo "${f2//\'/''}"
no single quotes

所以

sqlite3 ${db_name} "insert into ${table_name} (${column1},${column2}) values ('${f1//\'/''}','${f2//\'/''}');"
于 2013-01-15T15:26:31.833 回答
4

从 bash 中,您可以使用 ${varname//x/y} 将 varname 变量中的所有 x 实例替换为 y 。

sqlite3 ${db_name} "insert into ${table_name} (${column1},${column2}) values ('${f1//\'/\'}','${f2//\'/\'}');"

尽管@ignacioVazquez-Abrams 有最好的答案,但将用\'替换任何',因为php perl python都有帮助清理输入的模块。

于 2013-01-15T14:19:40.813 回答
0

你可以使用\

f1="I\'m just kidding"
于 2013-01-15T14:11:58.310 回答