컬 명령의 일부를 변수로 바꾸는 중 오류가 발생했습니다.

컬 명령의 일부를 변수로 바꾸는 중 오류가 발생했습니다.

컬 명령을 여러 번 실행하는 스크립트를 작성 중입니다. 컬 명령은 스크립트 전체에서 다르게 사용되며 여러 번 재사용될 명령 부분을 대체하는 변수를 사용하여 (나중에 스크립트를 디버깅해야 할 때) 시간을 절약하고 싶었습니다.

curl -g -x "" -k컬 명령을 여러 번 사용하지만 다른 스크립트 예

# Usage 1
curl -g -x "" -k http://www.example.com/rest/v1/blah

# Usage 2
curl -g -x "" -k -i -X POST -H "Content-Type:application/json" -d "{'Username':'sally','Password':'password'}" http://www.example.com/rest/v1/blahblah

변수를 사용하여 위 스크립트를 다시 작성하고 싶습니다.curl -g -x "" -k

# Snippet of curl command that will be used several times in script
curl_command="curl -g -x \"\" -k"

# Usage 1
$curl_command http://www.example.com/rest/v1/blah

# Usage 2
$curl_command -i -X POST -H "Content-Type:application/json" -d "{'Username':'sally','Password':'password'}" http://www.example.com/rest/v1/blahblah

다시 작성된 스크립트를 실행하면 오류가 발생합니다.

curl: (5) Could not resolve proxy: ""; Name or service not known

사용법 1의 경우 실행 중인 것으로 나타나 curl -g -x '""' -k http://www.example.com/rest/v1/blah위에 표시된 오류가 발생합니다. curl_command="curl -g -x '' -k"실행 시 변수를 할당하고 중괄호 {}로 묶으려고 했지만 비슷한 오류가 발생했습니다. 이 글을 직장에 어떻게 쓰나요?

미리 감사드립니다 :)

답변1

기본적으로 귀하의 질문은공백이나 기타 특수 문자 때문에 쉘 스크립트가 멈추는 이유는 무엇입니까?

외부 따옴표를 쓰면 $curl_command변수 값을 가져와 curl_command각 공백 시퀀스에서 별도의 단어로 분할합니다. (각 단어는 와일드카드 패턴으로 해석되어 일치하는 파일 이름 목록(있는 경우)으로 대체되지만, 귀하의 경우에는 와일드카드가 없으므로 이 단계에서는 아무 것도 변경되지 않습니다.)

따옴표는 쉘 구문의 일부입니다. 따옴표가 없는 변수 확장의 영향을 받지 않습니다. 따라서 명령은 $curl_command매개변수를 사용하여 실행됩니다.curl-g-x""-k

문자열 목록(명령 매개변수)을 문자열에 채우려고 합니다. 그것은 잘 작동하지 않습니다. 사실 아무것도 공허한 말을 할 수 없습니다.

강력한 솔루션은 유형 변수를 사용하는 것입니다.문자열 목록문자열 목록을 저장합니다. 이를 쉘에서는 배열이라고 합니다. Bash, ksh 및 zsh 지원 배열:

curl_command=(curl -g -x "" -k)
"${curl_command[@]}" http://www.example.com/rest/v1/blah

이 변수 에는 요소가 , , 빈 문자열 및 curl_command인 5 요소 배열이 포함되어 있습니다 .curl-g-x-k

일반 sh 스크립트가 필요한 경우 다른 작업을 수행할 필요가 없다고 가정하고 위치 매개변수를 사용할 수 있습니다.

set -- curl -g -x "" -k
"$@" http://www.example.com/rest/v1/blah

또 다른 가능성은 함수를 사용하여 여러 번 사용될 코드를 캡슐화하는 것입니다.

curl_command () {
  curl -g -x "" -k "$@"
}
curl_command http://www.example.com/rest/v1/blah

관련 정보