如何在Bash中移除SQLite3命令结果里的PRAGMA busy_timeout值
解决SQLite添加busy_timeout后返回多余值的问题
问题核心是:在同一条SQL语句里执行pragma busy_timeout=20000时,SQLite会返回该pragma的当前设置值(即20000),导致和后续查询结果混在一起。以下是几种可行的修改方案:
方案1:使用命令行参数设置超时(推荐)
直接通过sqlite3的命令行参数-busy-timeout设置超时时间,这样不会输出pragma的返回值,仅保留查询结果:
result=$(sqlite3 -busy-timeout 20000 sample.db "SELECT count(*) FROM table WHERE value='sample';") echo $result
方案2:过滤输出结果
如果必须在SQL语句中写pragma,可以通过tail命令只保留最后一行的查询结果:
result=$(sqlite3 sample.db "pragma busy_timeout=20000; SELECT count(*) FROM table WHERE value='sample';" | tail -n1) echo $result
方案3:使用Here-Doc写法(更清晰)
用Here-Doc分隔多条SQL语句,再过滤输出:
result=$(sqlite3 sample.db <<EOF pragma busy_timeout=20000; SELECT count(*) FROM table WHERE value='sample'; EOF | tail -n1) echo $result
内容的提问来源于stack exchange,提问作者Amin SZ
相关产品推荐
相关产品推荐

