【问题标题】:Escaping a SQLite query in a bash script在 bash 脚本中转义 SQLite 查询
【发布时间】:2021-11-13 22:39:37
【问题描述】:

在我的 bash 脚本中

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

如果我那么写

sqlite test.db ${my_query}

我得到了错误

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

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

【问题讨论】:

    标签: sql bash sqlite escaping quotes


    【解决方案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;'
    

    【讨论】:

    • 您不需要转义嵌套引号是对的,但我仍然需要一些引号来调用 sqlite 以确保将整个查询解释为单个参数。这显示在我自己对问题的回答中(但实际上是其他人的回答)。
    【解决方案2】:

    有人写了以下答案:

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

    但随后几乎立即将其删除,但幸运的是我看到了它并且它对我有用。

    【讨论】:

    • 当您编写 shell 脚本时,您可能会发现此工具很有用:shellcheck.net
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-17
    • 2019-06-27
    相关资源
    最近更新 更多