You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Bash脚本中执行SQLite查询的正确引号转义方法是什么

问题原因

你遇到的报错由两个Bash特性共同导致:

  • 未被双引号包裹的变量在展开时会触发单词拆分,空格、换行等分隔符会把变量内容切割为多个独立参数传给执行命令
  • 写在变量值内部的转义引号仅会被识别为普通文本,不会被Bash当成参数边界符处理

你之前的写法中,${my_query}展开后会被拆分为'select、uid、from、lastlog;'四个独立参数,sqlite3除了数据库名test.db之外只接收一个SQL参数,多余的uid等参数无法识别,因此抛出错误。

正确写法

基础场景(SQL无内置单引号)

直接把SQL内容赋值给变量,调用时给变量套双引号即可:

# 变量定义无需额外加转义引号
my_query='select uid from lastlog;'
# 调用时必须用双引号包裹变量,避免单词拆分
sqlite3 test.db "${my_query}"

扩展场景(SQL内置单引号)

如果SQL语句本身需要单引号(比如字符串匹配条件),可以用两种方式转义:

  1. 单引号包裹SQL时,用两个连续单引号表示字面量单引号:
my_query='select uid from lastlog where username=''admin'';'
  1. 双引号包裹SQL时,内部单引号直接写即可:
my_query="select uid from lastlog where username='admin';"

调用方式和基础场景一致,加双引号包裹变量即可。

内容的提问来源于stack exchange,提问作者loris

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 06:09:03