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

如何在jq中使用参数替换作为键

解决jq中用参数作为对象键的问题

当然可以实现这个需求,你需要使用jq的动态键语法——将变量包裹在方括号[]中,就能让变量的值作为对象的键名。

为什么你之前的写法不行?

  • 直接写$reg::jq的对象字面量默认键是固定字符串,直接用变量会触发语法错误。
  • 写"$reg":这会被当作字符串字面量处理,输出的键名就是$reg,不会替换成变量的实际值。
  • 写\$reg:转义后的符号依然是字符串,同样无法触发变量替换。

修改后的代码示例

export USERNAME=joe
export PASSWORD=whatever
export DOCKER_REGISTRY="hub.docker.io"
jq -n --arg reg "${DOCKER_REGISTRY}" \
        --arg u "$USERNAME" \
        --arg p "${PASSWORD}" \
        --arg auth "$(printf "%s" "$USERNAME:$PASSWORD" | base64)" \
        '{
          "auths": {
            [$reg]: {
              "username": $u,
              "password": $p,
              "auth": $auth
            }
          }
        }'

关键修改说明

把原来的$reg:改为[$reg]:,jq就会自动将$reg变量的取值(比如hub.docker.io)作为对象的键名,而不是把$reg当作字面量。

另外补充一个小优化:用printf "%s" "$USERNAME:$PASSWORD"代替echo生成base64内容,避免echo自动添加的换行符导致base64结果多出不必要的换行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 17:02:46