bash 및 변수 명령 대체 문제

bash 및 변수 명령 대체 문제

URL에 대한 컬 요청을 수행하는 bash 스크립트가 있습니다. 모든 컬 헤더와 정보는 변수에 포함되어 있습니다. 여기에 간단한 예가 있습니다.

STRING="'http://www.mydomain.com/url' -H 'mydomain.com'"

나는 원래 스크립트가 echo와 xargs를 통해 전달하도록 했지만 이것이 좋은 접근 방식이 아닐 수도 있다는 것을 계속 읽었습니다.

이제 "curl: (1) 프로토콜 'http'가 libcurl에서 지원되지 않거나 비활성화되었습니다."라는 컬 오류가 발생 curl $STRING하도록 큰따옴표를 추가하려고 시도했을 때 문제가 발생했습니다.curl "$STRING"

아마도 따옴표와 공백과 관련하여 여기서 간단한 것을 간과하고 있다고 생각합니다. (나는 이전에 작은 따옴표를 이스케이프 처리하려고 시도했고 문자 그대로 문자열에 추가했습니다)

$STRING을 echo하면 모든 따옴표와 작은 따옴표로 작성된 것으로 표시되고 echo $STRING | xargs curl입력 시 문자열이 말리면서 원하는 작업을 정확하게 수행합니다.

답변1

xargs특히 작동하는 경우 문제가 무엇입니까 ?

쉘은 확장의 결과가 아닌 따옴표를 제거합니다. 즉, 큰따옴표 제거의 결과인 작은따옴표는 제거되지 않습니다. 대신 배열을 사용하십시오.

args=('http://www.mydomain.com/url' -H 'mydomain.com')
curl "${args[@]}"

답변2

오류가 발생한 단어 앞에 추가 인용문이 있는 것 같습니다.http이로 인해 발생할 수 있습니다. 실행하기 전에 문자열을 에코하여 구문이 올바른지 확인해야 합니다.

"curl: (1) Protocol "'http" not supported or disabled in libcurl"
                     ^

관련 정보