从shell变量运行带有JSON内容的curl命令[重复]

Posted

技术标签:

【中文标题】从shell变量运行带有JSON内容的curl命令[重复]【英文标题】:Running curl command with JSON content from a shell variable [duplicate] 【发布时间】:2018-09-15 05:31:06 【问题描述】:

我有下面的脚本...

而且我似乎无法让变量起作用

#!/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

如果没有$info,即使--data '$object' 也无法工作...因为 Slack API 无法读取我的请求。

我该如何解决这个问题?

【问题讨论】:

使用shellcheck.net 捕捉脚本中的错误。 @chepner:你能找到合适的骗子吗?我似乎在 SO 中找不到,只能在 Unix.SE 中找到 很多问题.. = ... $info 在单引号内不应该有空格 - 不会被扩展.. 请参阅mywiki.wooledge.org/Quotes @Inian 单/双引号 --> ***.com/questions/6697753/… @Sundeep 很长一段时间以来,我一直在尝试使用该链接,我想用一个明确的问题来欺骗一个明确的问题,即单引号不会扩展变量并且需要双引号。您分享的内容比需要的更详细 【参考方案1】:

在传递 shell 变量时使用双引号并删除变量赋值中的多余空格。

curl -X POST -H 'Content-type: application/json' --data "$object"
#                                                       ^^^^^^^^^^

使用嵌套引号将值保留在 JSON 语法中

info='Help...?'
object='"attachments": ["title": "ti1","text": "'"$info"'" ]'

【讨论】:

以上是关于从shell变量运行带有JSON内容的curl命令[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何在 xampp shell 中运行 $curl?

如何编写一个shell脚本

jq --- shell命令模式下JSON格式化利器

[Shell]清空文件内容 | 使用curl进行post请求

shell命令之read

PHP中的HTTP POST