来自bash脚本的sqlite查询,单引号中断语法

来自bash脚本的sqlite查询,单引号中断语法,bash,sqlite,variables,Bash,Sqlite,Variables,我在bash脚本中有以下内容: sqlite3 database.db "INSERT INTO tbl (col1,col2) VALUES ('\"$line\"','\"$stdout\"');" ,其中,$line变量不会产生任何问题,但是我的$stdout 变量是从whois$line输出的,因此它包含许多字符,其中一个是 是”,它打破了sqlite3语法 是否有某种方法可以引用escape该变量,使其顺利通过 在这个查询中 编辑 对不起,我在这里找到了解决方案 我应该删除这个问题吗

我在bash脚本中有以下内容:

sqlite3 database.db "INSERT INTO tbl (col1,col2) VALUES ('\"$line\"','\"$stdout\"');"
,其中,
$line
变量不会产生任何问题,但是我的
$stdout
变量是从
whois$line
输出的,因此它包含许多字符,其中一个是 是
,它打破了
sqlite3
语法

是否有某种方法可以引用escape该变量,使其顺利通过 在这个查询中

编辑

对不起,我在这里找到了解决方案


我应该删除这个问题吗?

简单引号
的标准SQL转义序列是双简单引号
'

使用bash模式替换,可以执行必要的替换:

sh$ DSQ="''"
sh$ stdout="I'm in a big'trouble"
sh$ echo "${stdout//\'/$DSQ}"
I''m in a big''trouble
在您的具体情况下:

DSQ="''"
sqlite3 database.db \
    "INSERT INTO tbl (col1,col2) VALUES ('$line','${stdout//\'/$DSQ}');"

对这与另一个问题非常接近。我很高兴堆栈溢出以这种或那种方式解决了您的问题。顺便说一句,您不是“过度引用”了SQL语句吗?那些
\“
是必需的吗?不,它们不是,我在脚本中更正了这一点,但没有动它们