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

Shell脚本中curl使用变量传递payload时请求异常问题

Shell调用curl传变量报错根因

核心问题是Shell词法解析规则和你肉眼看到的字符串输出逻辑不一致,你打印出来的命令相同不代表实际传给curl的参数相同,两个具体问题点如下:

  • 未加双引号包裹的变量展开会触发单词拆分
    你写的--data-raw $payload属于典型的变量展开未加引号场景,Shell会把$payload的内容按空白字符(空格、制表符、换行)拆成多个独立参数传给curl。你的payload值{"deployed": true}里包含一个空格,拆分后实际传给curl的是两个独立参数:{"deployed":和true},curl拿到的请求体是不完整的,自然报错。
    你用echo打印命令时,echo会自动把多个入参用空格拼接成字符串输出,肉眼看不到参数拆分的边界,才会误以为命令和硬编码版本完全一致。如果开set -x打印Shell执行的真实参数列表,就能清晰看到拆分后的参数结构。
  • 现有写法的Header参数存在引号嵌套错误
    你写的--header "'Content-Type: application/json'"会把带单引号的字符串'Content-Type: application/json'传给curl,最终发送给服务端的Header值是多余单引号的,不符合HTTP规范。硬编码版本能拿到预期响应,纯粹是目标服务做了容错兼容,本身属于错误写法。

正确可复现的写法

所有带特殊字符、空格的参数,以及变量展开,统一用双引号包裹,去掉Header里多余的嵌套单引号:

payload='{"deployed": true}'
curl -i -X POST "$url" \
  --header "Content-Type: application/json" \
  --data-raw "$payload"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 16:21:21