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

Bash脚本使用变量拼接JSON时输出格式混乱如何解决

问题成因

你的SETTINGS_LIST对应的文件是Windows格式,每行结尾是\r\n(CRLF换行符),而非Linux/Unix默认的\n(LF换行符)。read命令读取每行时会把行尾的\r也存入endpoint变量,当你执行echo输出时,\r会将光标移动到当前行的开头,导致后面输出的"}覆盖了行首的{",就出现了你看到的异常格式。你硬编码路径的时候没有带\r字符,所以输出正常,你之前尝试jq、printf仍有问题也是因为变量中携带的\r没有被提前处理。

解决方法
  • 方案1:转换原文件格式为Unix格式,执行dos2unix "${SETTINGS_LIST}"即可,转换后原脚本不需要修改即可正常运行。
  • 方案2:不修改原文件,读取内容时直接过滤掉\r字符,把脚本第一行改为:
    cat "${SETTINGS_LIST}" | tr -d '\r' | while read endpoint
    
  • 方案3:读取变量后手动移除结尾的\r,在循环内第一行添加处理逻辑:
    endpoint=${endpoint%$'\r'}
    

额外建议

生成JSON时优先用jq工具格式化,避免变量包含特殊字符时破坏JSON结构,示例写法:

jq -n -c --arg id "$n" --arg url "$endpoint" '{"id": $id, "method": "GET", "url": $url}'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 01:09:03