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

如何将Shell变量HOUR传入jq查询以获取当前小时能源价格

解决jq中使用变量作为数组索引的问题

你之前用--arg失败的原因是:--arg传入的是字符串类型,而jq的数组索引要求是数字类型,所以需要把字符串转成数字,或者直接传入数字类型的参数。下面是两种可行的方法:

方法1:用--arg配合tonumber转换类型

HOUR=$(date '+%-H')
jq --arg hour "$HOUR" '.energy.todayHours[($hour | tonumber)].priceIncludingVat' < "$JSON"

这里通过($hour | tonumber)把传入的字符串类型的小时数转成数字,就能正常作为数组索引使用。

方法2:用--argjson直接传入数字类型(更简洁)

HOUR=$(date '+%-H')
jq --argjson hour "$HOUR" '.energy.todayHours[$hour].priceIncludingVat' < "$JSON"

--argjson会将传入的内容当作JSON值解析,所以当$HOUR是数字格式的字符串时,它会直接被识别为数字类型,无需额外转换。

不推荐的写法(存在安全风险)

虽然可以直接把变量嵌入jq的查询字符串中,但如果变量包含特殊字符,可能会导致jq语法错误或注入问题,所以不建议使用:

HOUR=$(date '+%-H')
jq ".energy.todayHours[$HOUR].priceIncludingVat" < "$JSON"

内容的提问来源于stack exchange,提问作者X-File

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 13:18:13