我写了一个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
请有人请告诉我如何逃避变量中的单引号? 任何建议表示赞赏。谢谢!
答案 0 :(得分:4)
你可以使用$ {varname // x / y}在varname变量中用y替换x的所有实例。
sqlite3 ${db_name} "insert into ${table_name} (${column1},${column2}) values ('${f1//\'/\'}','${f2//\'/\'}');"
将替换任何'with'虽然@ ignacioVazquez-Abrams有最好的答案,因为php perl python都有模块来帮助消毒输入。
答案 1 :(得分:3)
要转义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//\'/''}');"
答案 2 :(得分:0)
您可以使用 \
f1="I\'m just kidding"