Bash 함수의 변수 참조

Bash 함수의 변수 참조

Bash 스크립트에 짧은 도우미 함수를 정의했습니다. 가독성을 위해 상용구 헤더를 함수 외부에 선언된 변수로 바꾸고 싶습니다.

나는 그 진술을 다양한 방법으로 참조하려고 시도했지만 아무것도 작동하지 않았습니다.

이걸 교체하고 싶어요

put() {
  local response=$(curl -H 'Content-Type: application/json' -H 'Accept: application/vnd.urbanairship+json; version=3;' ...)
  echo $response
}

이 같은

headers=???

put() {
  local response=$(curl $headers ...)
  echo $response
}

즉, 다음 $headers으로 확장되어야 합니다.-H 'Content-Type: application/json' -H 'Accept: application/vnd.urbanairship+json; version=3;'

$headers매개변수로 올바르게 전달하려면 별도의 단어로 확장해야 하므로 배열을 사용해 보기도 했습니다.

참고: 거의 포기했습니다. 이렇게 간단한 용도로는 논쟁할 가치가 없습니다. 이 시점의 질문은 계몽을 위한 것입니다.

답변1

배열을 사용하여 이 문제를 해결할 수 있습니다.

headers=( -H 'Content-Type: application/json' 
          -H 'Accept: application/vnd.urbanairship+json; version=3;' )

"${headers[@]}"그런 다음 통화에 사용할 수 있습니다 curl.

curl "${headers[@]}" URL

확장에 대한 참조는 배열의 4개 항목( -H, 및 ) Content-Type: application/json이 개별적으로 참조되므로 셸에 의해 더 이상 분할되지 않도록 합니다.-HAccept: application/vnd.urbanairship+json; version=3;

귀하의 기능:

put () {
    curl "${headers[@]}" URL
}

responsewin 구현의 변수는 불필요합니다 . 따옴표 없이 호출하면 echo해당 값을 공백(기본적으로)으로 추가로 분할하고 각 부분에 파일 이름 글로빙을 적용합니다. echo호출 결과를 출력하는 데 대신 사용하도록 남겨둘 수 있습니다 .curlcurl

관련 정보