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

如何在Bash中通过jq传递变量获取JSON对应键的值?

解决Bash脚本中遍历JSON键值对的问题

问题根源

你原来的写法里,jq会把.[]里的key当成字面量字符串,而非引用Bash变量$key,因此无法正确获取对应值。以下是几种可行解决方案:


方案1:用jq的--arg传递变量(推荐,安全可靠)

通过--arg参数将Bash变量传递给jq,避免字符串拼接的潜在问题:

keys=$(echo "$tags" | jq -r 'keys[]')
for key in $keys; do
    # 用--arg把Bash的$key传给jq的$k变量
    value=$(echo "$tags" | jq -r --arg k "$key" '.[$k]')
    echo "$key has value $value"
done

方案2:字符串拼接引用键(仅适用于无特殊字符的键)

如果JSON键不含引号、空格等特殊字符,可直接通过字符串拼接让jq识别变量:

keys=$(echo "$tags" | jq -r 'keys[]')
for key in $keys; do
    value=$(echo "$tags" | jq -r ".\"$key\"")
    echo "$key has value $value"
done

方案3:一次性输出键值对(更高效,减少jq调用)

用jq的to_entries将JSON转为键值对数组,一次性输出后在Bash中处理,避免多次调用jq:

# 用制表符分隔键和值,兼容值含空格的场景
echo "$tags" | jq -r 'to_entries[] | "\(.key)\t\(.value)"' | while IFS=$'\t' read -r key value; do
    echo "$key has value $value"
done

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 11:23:10