Curl

curl json正文中的$ 1現在可以使用

  • September 6, 2019

我有一個這樣的腳本:

#!/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,這將阻止 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"}}' )"

引用自:https://unix.stackexchange.com/questions/405189