변수로 컬링

변수로 컬링

아래에는 하나의 항목만 출력됩니다.

SEARCH_URL="http://91.132.145.114/json/stations/search"

curl -X POST -d 'tag=jazz' -d 'language=english' -d 'state=queensland' "$SEARCH_URL"

하지만 변수에 정확한 값이 있으면 출력이 달라집니다. -d많이 무시하고 출력하는 것 같습니다 .

SEARCH_URL="http://91.132.145.114/json/stations/search"
# parse options and store them in OPTS
# OPTS is something like this. 
OPTS="-d 'tag=jazz' -d 'language=english' -d 'state=queensland'"
curl -X POST "$OPTS" "$SEARCH_URL"

어떻게 작동하게 할 수 있나요? 왜 작동하지 않나요?

답변1

큰따옴표는 "$OPTS"변수의 내용이 공백으로 인해 분할되는 것을 방지하므로 다음과 같이 처리됩니다.하나컬 매개변수. 즉, 실행하는 것과 동일합니다.

curl -X POST "-d 'tag=jazz' -d 'language=english' -d 'state=queensland'" "$SEARCH_URL"

대신 배열을 사용하세요. 예를 들어:

SEARCH_URL="http://91.132.145.114/json/stations/search"

OPTS=(-d 'tag=jazz' -d 'language=english' -d 'state=queensland')
curl -X POST "${OPTS[@]}" "$SEARCH_URL"

이로 인해각 요소OPTS 배열의 값은 curl작은따옴표로 묶인 문자열인 것처럼 명령줄에 삽입됩니다. 이는 요소에 공백 문자 등이 포함된 경우 특히 유용합니다.

그런데 옵션을 구문 분석할 때 다음과 같이 배열에 새 요소를 추가할 수 있습니다.

OPTS+=(newoption)

또는

OPTS+=(-d 'foo=bar')    # add two new elements: '-d' and 'foo=bar'

관련 정보