来自bash脚本的sqlite查询,单引号中断语法
我在bash脚本中有以下内容:来自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该变量,使其顺利通过 在这个查询中 编辑 对不起,我在这里找到了解决方案 我应该删除这个问题吗
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语句吗?那些\“
是必需的吗?不,它们不是,我在脚本中更正了这一点,但没有动它们