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

Shell脚本拼接JSON调用curl报大括号不匹配错误如何排查?

问题原因与修复方案

核心问题点

  • curl的-u参数书写错误:你把身份验证凭据和请求URL放在了同一个单引号包裹的参数中,curl无法识别拆分,导致URL解析异常。
  • JSON字符串拼接的引号逻辑错误:你混用了单双引号和转义符,最终生成的JSON字符串携带多余的转义符、首尾单引号,不符合JSON格式要求。
  • --data参数后没有给$json变量加双引号:shell会将变量内容按空白字符拆分为多个独立参数,curl会把拆分后的片段当成新的URL请求,直接导致Could not resolve host: "refs这类报错。

修复代码

纯shell拼接版(适合简单场景)

CLUSTER_NAME=testclu
Node_name=testnode
# 外层用双引号,内部双引号转义,变量直接嵌入
json="{\"definition\":{\"id\":5474},\"sourceBranch\": \"refs/heads/feature/node-memory-clean-up\",\"parameters\": {\"system.debug\":\"false\",\"Cluster_name\":\"$CLUSTER_NAME\",\"Node_name\":\"$Node_name\"}}"

printf '%s\n' "$json"

# 拆分-u参数和URL,--data后变量加双引号
curl -X POST \
-u 'xxyv.x.xxx' \
'https://dev.azure.com/sample/RD%20Tech%20AIML%20DevOps/_apis/build/builds?api-version=5.0' \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
--data "$json"

jq生成版(更稳妥,自动处理特殊字符转义)

如果变量可能包含引号、空格等特殊字符,推荐用jq生成标准JSON,避免格式错误:

CLUSTER_NAME=testclu
Node_name=testnode
# 用jq自动拼接合法JSON
json=$(jq -n \
--arg cluster "$CLUSTER_NAME" \
--arg node "$Node_name" \
'{
  "definition": {"id": 5474},
  "sourceBranch": "refs/heads/feature/node-memory-clean-up",
  "parameters": {
    "system.debug": "false",
    "Cluster_name": $cluster,
    "Node_name": $node
  }
}')

printf '%s\n' "$json"

curl -X POST \
-u 'xxyv.x.xxx' \
'https://dev.azure.com/sample/RD%20Tech%20AIML%20DevOps/_apis/build/builds?api-version=5.0' \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
--data "$json"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 22:45:07