如何从bash中的sqlite3命令结果中删除pragma忙碌_timeout值?

ndh0cuux  于 2023-08-06  发布在  SQLite
关注(0)|答案(2)|浏览(106)
result=$(sqlite3 sample.db "SELECT count(*) FROM table WHERE value='sample';")
echo $result

字符串
结果是1
由于“数据库已锁定”错误,我更改了代码:

result=$(sqlite3 sample.db "pragma busy_timeout=20000; SELECT count(*) FROM table WHERE value='sample';")
echo $result


但现在的结果是:

20000 1


我不希望结果中有busy_timeout值。
我希望结果是1
如何通过编辑sqlit3命令来实现这一点?

wtlkbnrh

wtlkbnrh1#

取决于保存在result变量中的内容的格式。
在当前代码中,我们看到:

$ echo $result
20000 1

字符串
由于变量引用没有用双引号括起来,我们无法判断sqlite3是否在两个数字之间放置了空格或换行符。所以,让我们看看解决这两种可能性...

变量用双引号括起来,表示数字之间有空格:

$ echo "$result"
20000 1

# one idea:

$ read -r timeout result < <(sqlite3 ....)
$ typeset -p timeout result
declare -- timeout="20000"
declare -- result="1"

变量用双引号括起来,数字之间加换行符:

$ echo "$result"
20000
1

# one idea:

$ result=$(sqlite3 .... | tail -1)
                        ^^^^^^^^^
$ typeset -p result
declare -- result="1"


另一个允许OP维护当前代码和一个新赋值的选项:

$ result=$(sqlite3 ....)
$ result="${result##*[[:space:]]}"


测试:

$ result="20000
1"
$ result="${result##*[[:space:]]}"
$ typeset -p result
declare -- result="1"

$ result="20000 1"
$ result="${result##*[[:space:]]}"
$ typeset -p result
declare -- result="1"

gt0wga4j

gt0wga4j2#

感谢@user4157124

Sqlite3命令必须编辑如下:

第一个月
防止出现数据库被锁定错误,结果变量未与超时值合并。

相关问题