在shell变量中转义单引号

时间:2013-01-15 14:06:05

标签: bash shell

我写了一个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

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

3 个答案:

答案 0 :(得分:4)

从bash

你可以使用$ {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"