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

如何修复Shell脚本中带JSON变量的curl命令执行问题?

修复你的Bash Slack脚本问题

我来帮你一步步解决脚本里的问题,主要有几个关键错误需要修正:

问题1:变量赋值的空格错误

Bash里变量赋值时,等号两边不能有空格,否则系统会把它当成命令执行。你原来的info = 'Help...?'会直接报错,要改成:

info='Help...?'

问题2:JSON里的变量无法展开 + JSON格式错误

单引号包裹的字符串中,Bash不会解析变量(比如$info),而且JSON要求字符串必须用双引号包裹。所以你需要用双引号定义object变量,同时转义JSON内部的双引号,确保变量能被正确替换:

object="{\"attachments\": [{\"title\": \"ti1\",\"text\": \"$info\" }]}"

这样$info的内容会被正确插入到JSON的text字段中,同时完全符合JSON的语法规范。

问题3:curl的--data参数变量未展开

你用单引号'$object'会让curl把$object当成字面字符串发送,而不是变量里的JSON内容。需要改成双引号包裹变量,让Bash先展开变量再传递给curl:

curl -X POST -H 'Content-type: application/json' --data "$object" https://hooks.slack.com/services/xxxx

修复后的完整脚本

#!/bin/bash
info='Help...?'
object="{\"attachments\": [{\"title\": \"ti1\",\"text\": \"$info\" }]}"
curl -X POST -H 'Content-type: application/json' --data "$object" https://hooks.slack.com/services/xxxx
exit 0

另外,如果你觉得转义双引号麻烦,也可以用Here-doc的方式构造JSON,可读性更好:

#!/bin/bash
info='Help...?'
curl -X POST -H 'Content-type: application/json' https://hooks.slack.com/services/xxxx <<EOF
{"attachments": [{"title": "ti1","text": "$info"}]}
EOF

这种方式不需要转义内部的双引号,变量也能正常展开,更适合复杂的JSON内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:59:49