卷曲 json 正文中的 $1 现已正常工作

卷曲 json 正文中的 $1 现已正常工作

我有一个这样的脚本:

#!/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"}}' )"

相关内容