在 bash 脚本中转义 SQLite 查询

Escaping a SQLite query in a bash script

提问人:loris 提问时间:9/20/2021 更新时间:9/20/2021 访问量:143

问:

在 bash 脚本中,我有

my_query="\'select uid from lastlog;\'"

如果我然后写

sqlite test.db ${my_query}

我收到错误

/usr/bin/sqlite3: Error: too many options: "uid"

转义引号的正确方法是什么?

sql bash sqlite 转义 引号

评论


答:

1赞 HatLess 9/20/2021 #1

以你为例,它清楚地表明了问题所在。echo

$ my_query="\'select uid from lastlog;\'"
$ echo $my_query
\'select uid from lastlog;\'

由于您的变量已经被引号引用,因此无需转义嵌套的单引号。

$ my_query="'select uid from lastlog;'"
$ echo $my_query
'select uid from lastlog;'

评论

2赞 loris 9/20/2021
你说的没错,不需要转义嵌套引号,但我仍然需要一些引号来调用sqlite,以确保整个查询被解释为单个参数。这在我自己对这个问题的回答中有所体现(但实际上是别人的答案)。
1赞 loris 9/20/2021 #2

有人写了以下答案:

my_query='select uid from lastlog;'
sqlite test.db "${my_query}"

但后来几乎立即删除了它,但幸运的是我看到了它,它对我有用。

评论

1赞 Ionuț G. Stan 9/20/2021
在编写 shell 脚本时,您可能会发现此工具很有帮助: shellcheck.net