提问人:loris 提问时间:9/20/2021 更新时间:9/20/2021 访问量:143
在 bash 脚本中转义 SQLite 查询
Escaping a SQLite query in a bash script
问:
在 bash 脚本中,我有
my_query="\'select uid from lastlog;\'"
如果我然后写
sqlite test.db ${my_query}
我收到错误
/usr/bin/sqlite3: Error: too many options: "uid"
转义引号的正确方法是什么?
答:
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
评论