カール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。これにより、シェルが文字列を拡張するのを防ぐことができます。

代わりに:

curl --request POST \
    --url 'http:/myUrl.com/etc' \
    --header 'content-type: application/json' \
    --data '{"myId": '"$1"', "services": {"ENABLE_THE_SERVICE": "1"}}'

dataこれにより、文字列の最初の部分が$1二重引用符で囲まれ、残りの$1データ内容と一重引用符で囲まれた新しい文字列に関連付けられる前に終了します。

これは、の文字​​列が$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"}}' )"

おすすめ記事