이제 컬 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"}}' )"

관련 정보