내 문제는 단순히 공백이 포함된 인수를 전달하는 것이 아닙니다(그 방법을 알고 있습니다). 더 복잡한 경우를 고려해보세요.
function build() {
make CC="$1" CFLAGS="$2" $* # $* is not correct here!
}
build gcc "XXX" VAR1="a b" VAR2="c=A d=B" LDFLAGS="-L/opt/lib -lm"
동등하다
make CC=gcc CFLAGS=XXX VAR1="a b" VAR2="c=A d=B" LDFLAGS="-L/opt/lib -lm"
나는 이것이 쉘에서 작동하도록 하고 싶습니다(이식 가능한 솔루션을 제공하고 bashism 등을 사용하지 마십시오). 어떤 제안이나 권장 사항이 있습니까?
답변1
더 나은 솔루션에는 두 가지 요소가 있습니다.
shift
- (더 보기) 인용문
다음과 같이 정의 함수를 사용하십시오 shift
.
function build {
local cc="$1"
local cflags="$2"
shift 2
make CC="$cc" CFLAGS="$cflags" "$@"
}
처음 두 개의 매개변수를 로컬 변수에 저장한 다음 전체 매개변수 배열을 추가로 2만큼 이동하면 참조 "$@"가 확장됩니다.
그런 다음 다음과 같이 추가 따옴표를 사용하여 호출하세요.
build gcc "XXX" 'VAR1="a b" VAR2="c=A d=B"' 'LDFLAGS="-L/opt/lib -lm"'
작은 따옴표는 함수의 추가 인수를 보호합니다. 그렇지 않으면 쉘이 따옴표를 제거하고 VAR2=c=A d=B
함수(따옴표 없이)만 남습니다.