매개변수를 사용하여 cURL 스크립트에 매개변수 정보 전달

매개변수를 사용하여 cURL 스크립트에 매개변수 정보 전달

스크립트를 실행할 때 사용자가 startDate 및 endDate를 매개변수로 전달할 수 있는 스크립트를 작성하려고 합니다. 내 스크립트는 다음과 같습니다(test.sh로 저장).

VAR="$(curl -f -X POST -H 'X-API-TOKEN: XXXXXX' -H 'Content-Type: application/json' -d '{"format": "csv", "startDate": $1, "endDate": $2}' 'https://xxx.qualtrics.com/export-responses' | sed -E -n 's/.*([^"]+).+/\1/p')"
echo $VAR

스크립트를 실행할 때 다음을 입력합니다.

~/test.sh '"2020-05-13T17:11:00Z","2020-05-13T20:32:00Z"'

스크립트에서 오류가 발생합니다.

답변1

작은따옴표 안에 $1 및 $2를 사용하면 쉘은 작은따옴표 안에 있는 변수를 확장하지 않습니다.

단순화된 예를 생각해 보십시오:

#!/bin/bash

VAR="$(echo '{"format": "csv", "startDate": $1, "endDate": $2}')"
echo $VAR

이것을 실행하면 리터럴 $1합계를 얻게 됩니다 $2.

$ ./example hi ho
{"format": "csv", "startDate": $1, "endDate": $2}

이러한 변수는 작은따옴표 밖에 넣어야 합니다. 한 가지 옵션은 다음과 같습니다(변수 주위에 필요한 인용 텍스트도 추가했습니다.

#!/bin/bash

VAR="$(echo "{\"format\": \"csv\", \"startDate\": \"$1\", \"endDate\": \"$2\"}")"
echo $VAR

이제 나는 다음을 얻습니다:

$ ./example hi ho
{"format": "csv", "startDate": "hi", "endDate": "ho"}

관련 정보