다음과 같은 스크립트가 있습니다.
#!/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"}}' )"