对 shell 变量中的单引号进行转义

Die*_*yen 4 bash shell

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

sqlite3 ${db_name} "insert into ${table_name} (${column1},${column2}) values ('$f1','$f2');"
Run Code Online (Sandbox Code Playgroud)

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

# E.g., f1="I'm just kidding"
# The command reported an error:
Error: near "m": syntax error
Run Code Online (Sandbox Code Playgroud)

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

gle*_*man 5

要转义 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
Run Code Online (Sandbox Code Playgroud)

所以

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