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

如何在cURL请求的JSON请求体中插入bash变量

问题原因

Shell 语法中所有单引号(包括你用到的$'...'ANSI-C 风格单引号)包裹的内容都会被当作纯字符串字面量处理,内部的$PASSWORD变量不会被自动展开,所以你提交的密码变成了$PASSWORD字符串本身。

可用解决方案

以下方案按易用性、鲁棒性排序:

  1. 用双引号包裹整个 JSON 字符串,内部的双引号用反斜杠转义
    适合简单场景,语法最直观:
    curl $ARGOCD_SERVER/api/v1/session -d "{\"username\":\"admin\",\"password\":\"$PASSWORD\"}"
    
  2. 单双引号拼接实现变量注入
    不需要转义内部双引号,不容易写错:
    curl $ARGOCD_SERVER/api/v1/session -d '{"username":"admin","password":"'"$PASSWORD"'"}'
    
    拼接逻辑:单引号区间的JSON结构原样输出,"$PASSWORD"放在双引号区间会被正常展开,三部分拼接后就是符合要求的完整JSON。
  3. 用jq生成合法JSON(推荐)
    如果密码包含双引号、空格、换行等特殊字符,手动拼接容易导致JSON结构损坏,用jq会自动处理转义,鲁棒性最高:
    curl $ARGOCD_SERVER/api/v1/session -d "$(jq -n --arg user admin --arg pass "$PASSWORD" '{"username":$user,"password":$pass}')"
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 21:57:01