0

나는 -g "hello world" 스타일의 인수를 허용하는 프로그램을 가지고 있습니다.Bash : 쉘 변수에서 인수 그룹핑을 제어 하시겠습니까?

프로그램이 올바르게 작동하려면 -g"hello world"은 실제로 두 개의 독립된 인수 여야합니다.

아래의 쉘 스크립트

은 뭔가를 자동화 할 것으로 생각된다 : -g "hello world" bash에 의해 하나의 인수로 취급되기 때문에

MYPROG=/path/to/bin 
MYARG=-g\ \"hello\ world\" 

"$MYPROG" "$MYARG" 

은 물론,이 작동하지 않습니다.

MYPROG=/path/to/bin 
MYARG1=-g 
MYARG2=\"hello\ world\" 

"$MYPROG" "$MYARG1" "$MYARG2" 

이제 두 개의 인수 등으로 처리되기 때문에이 작동합니다 :

하나의 해결책은 같은 것을 가지고 쉘 스크립트에서 직접 -g"hello world"을 분할하는 것입니다. 그러나 -g"hello world"이 함께 있기 때문에 쉘 스크립트는 다소 어색해 보일 것입니다. 특히 스크립트에서 이와 같이 정의 된 수백 개의 인수가있는 경우.

내 질문은, 어떻게 내 변수를 두 변수로 분리하지 않고 하나의 변수를 두 개의 인수로 취급 할 수 있습니까? @gniourf_gniourf 말했듯이

+2

이것을 처리하는 유일한 방법은 배쉬를 사용하는 것입니다. –

+0

@shellter 나는 이미 그것을 시도했지만, 불행히도 공백에 내 args를 그룹화하지 않습니다. – ctitze

답변

2

,이 문제를 처리하는 가장 좋은 방법은 배열입니다 :

MYPROG=/path/to/bin 
MYARGS=(-g "hello world") 

"$MYPROG" "${MYARGS[@]}" 

할당 문은 두 개의 요소를 배열로 MYARGS을 정의한다 : "-g"와 "안녕하세요". "${arrayname[@]" 관용구는 셸에게 단어 분리 또는 다른 방법을 사용하지 않고 배열의 각 요소를 별도의 인수로 처리하도록 지시합니다.

+0

둘 다 고마워, 내 불필요하게 내 쉘 스크립트를 복잡하게하지 않고 내가 원하는 것을 해낸다! – ctitze