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

如何在Shell脚本运行时为输出JSON的每条数据追加指定变量字段

实现方案

你可以直接修改原有脚本里的jq处理逻辑,通过jq的传参功能注入shell变量,给返回的JSON数组每个对象追加字段即可,修改后的完整脚本如下:

#!/bin/bash

USERID=ricardo.sanchez
PASSWORD=password
PORT=2728

# 这里把`cat`写法换成更安全的while read循环,避免用户名含特殊字符时报错
while IFS= read -r u; do
  echo "$u"
  curl --user "$USERID:$PASSWORD" "http://198.98.99.12:46567/$PORT/protects/$u" \
  # 用--arg把shell变量传入jq上下文,遍历数组追加字段
  | jq --arg port_val "$PORT" --arg user_id "$u" 'map(. + {port: $port_val, userid: $user_id})' \
  > "m4-$u.json"
done < user-list.txt

核心修改说明

  • 使用jq的--arg参数传递shell变量到jq的执行环境,避免直接拼接变量引发的JSON语法错误、注入风险
  • map()函数会遍历curl返回的JSON数组的每一个对象,. + {字段名: 字段值}语法会在保留原有字段的基础上追加新字段,和你需要的输出效果完全一致
  • 额外把原有for u in $(cat user-list.txt)的写法替换成了while read的写法,对用户名包含空格、特殊符号的场景兼容性更好,如果你的用户名都是纯字母数字,用原来的for循环写法也可以正常运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 20:15:04