아래에는 하나의 항목만 출력됩니다.
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'