如何将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
相关产品推荐
相关产品推荐

