스크립트를 실행할 때 사용자가 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"}