在shell变量中转义单引号

aelbi1ox  于 2023-10-23  发布在  Shell
关注(0)|答案(3)|浏览(132)

我写了一个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 an error:
Error: near "m": syntax error

我们如何转义变量中的单引号?

pokxtpni

pokxtpni1#

要对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//\'/''}');"
qnzebej0

qnzebej02#

在Bash中,可以使用${varname//x/y}将varname变量中x的所有示例替换为y。

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

尽管@ignacioVazquez-Abrams有最好的答案,因为PHPPerlPython实现都有帮助净化输入的模块。

thtygnil

thtygnil3#

你可以用

f1="I\'m just kidding"

相关问题