![卷曲 json 正文中的 $1 现已正常工作](https://linux22.com/image/121923/%E5%8D%B7%E6%9B%B2%20json%20%E6%AD%A3%E6%96%87%E4%B8%AD%E7%9A%84%20%241%20%E7%8E%B0%E5%B7%B2%E6%AD%A3%E5%B8%B8%E5%B7%A5%E4%BD%9C.png)
我有一个这样的脚本:
#!/bin/bash
curl --request POST --url http:/myUrl.com/etc --header 'content-type: application/json' --data '{"myId": $1, "services": {"ENABLE_THE_SERVICE": "1"}}';
然后,当我尝试运行: ./myScript.sh 77777 时,出现如下错误:
{"code":"BAD_REQUEST","message":"[line: 1, column: 17] Unexpected character ('$' (code 36)): expected a valid value (number, String, array, object, 'true', 'false' or 'null')\n at [Source: org.jboss.resteasy.core.interception.MessageBodyReaderContextImpl$InputStreamWrapper@45771071; line: 1, column: 17]"}
你知道如何让它发挥作用吗?谢谢..
答案1
不要用单引号包含 的字符串$1
,这会阻止 shell 扩展它。
反而:
curl --request POST \
--url 'http:/myUrl.com/etc' \
--header 'content-type: application/json' \
--data '{"myId": '"$1"', "services": {"ENABLE_THE_SERVICE": "1"}}'
data
这将在 之前结束字符串的第一部分$1
,然后将其本身用双引号括起来$1
,并将其与新的单引号字符串与其余数据内容连接起来。
这假设 in 中的字符串$1
已经是 JSON 编码的字符串。如果不是,您可能需要使用jq
来构造数据有效负载:
curl --request POST \
--url 'http:/myUrl.com/etc' \
--header 'content-type: application/json' \
--data "$( jq -nc --arg id "$1" '{"myId": $id, "services": {"ENABLE_THE_SERVICE": "1"}}' )"