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

如何在Bash中为<<EOF执行的SQLite3查询结果分配变量名

如何将SQLite查询结果格式化为指定键值对形式?

你可以通过捕获SQLite查询的输出结果,将其赋值给变量后再格式化输出,这里有两种简单可靠的方法:

方法一:一次性捕获所有结果并分配变量

修改你的脚本,用命令替换捕获sqlite3的输出,再通过read命令将两个结果分别存入变量,最后输出指定格式:

#!/usr/bin/env bash
cd /Users/amar/Documents/ThesisCode/CEP_codes/mqtt-receiver

# 捕获两个查询的结果并分配给变量
read latency throughput <<< $(sqlite3 database <<EOF
SELECT sum(detection_time - generation_time)/count(*) from mobile_cep_data;
SELECT ((max(detection_time)- min(detection_time))*1000)/count(*) from mobile_cep_data;
EOF
)

# 按照需求格式化输出
echo "latency = $latency、throughput = $throughput"

这个方法的前提是sqlite3的两个查询结果会以空格(或换行)分隔输出,read命令会自动将连续的空白字符(包括换行)作为分隔符,把值分配给对应的变量。

方法二:分开执行查询并单独捕获结果

如果担心输出格式变化(比如某个查询返回空行或多输出),可以将两个查询分开执行,分别捕获结果,这样更稳妥:

#!/usr/bin/env bash
cd /Users/amar/Documents/ThesisCode/CEP_codes/mqtt-receiver

# 分别执行两个查询,捕获各自结果
latency=$(sqlite3 database "SELECT sum(detection_time - generation_time)/count(*) from mobile_cep_data;")
throughput=$(sqlite3 database "SELECT ((max(detection_time)- min(detection_time))*1000)/count(*) from mobile_cep_data;")

# 格式化输出
echo "latency = $latency、throughput = $throughput"

这种方式避免了多个查询输出合并可能带来的问题,每个变量对应明确的查询结果,可读性和稳定性都更好。

小提示

如果你的sqlite3输出存在多余的空行,可以在捕获结果时用sed '/^$/d'过滤掉,比如:

latency=$(sqlite3 database "SELECT ..." | sed '/^$/d')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:34:44