2013-08-09 2 views
2

bash 스크립트의 인수를 실행 파일로 전달하려고 시도 중 하나에 공백이 있습니다. 나는이 문제를 해결하는 방법을 찾고 있었지만 올바른 방법을 찾지 못했습니다. 스크립트는 first이고 스크립트는 second입니다.bash의 따옴표가 올바르게 유지됩니다.

첫 번째 스크립트 :

#!/bin/bash 
# first script 
ARGS="[email protected]" 
./second $ARGS 

초 스크립트 : 지금은 이런 식으로 실행하면

#!/bin/bash 
# second script 
echo "got $# arguments" 

, 나는 다음과 같은 결과를 얻을 :

$ ./first abc def 
got 2 args 
$ ./first "abc def" 
got 2 args 
$ ./first 'abc def' 
got 2 args 

가 어떻게 그것을 만들 수 있습니다 두 번째 스크립트는 하나의 인수 만받습니다.

답변

4

중간 변수를 사용하여 수행 할 수 없습니다. 만약 당신이 따옴표를 잃으면 항상 1 개의 인수를 전달합니다. 이 같은 변수를 사용하지 않는 경우

그러나, 직접 인수를 전달할 수 있습니다 :

./second "[email protected]" 

 

$ ./first abc def 
got 2 arguments 
$ ./first "abc def" 
got 1 arguments 

다른 방법을, 당신은 같은 인수를 저장하는 배열을 사용할 수 있습니다 이 :

#!/bin/bash 
# first script 
ARGS=("[email protected]") 
./second "${ARGS[@]}" 
+0

가 좋아,이 제한을 주어, 나는 구문 분석 할 수있는 방법/첫 번째 스크립트의 인수를 확인 ... 내부 필드 구분을 의미? 일부 값을 확인하기 위해 shift를 사용하고 있으며, 두 번째 스크립트를 실행하는 경우에만이 값을 확인합니다. –

+0

@ André 그런 다음 배열을 사용하여 값을 저장할 수 있습니다. 배열의 값은 호출 후에도 그대로 유지됩니다 – user000001

+0

충분히 명확하지 않았습니다. 다른 매개 변수도 있습니다.하지만이 방법으로 모두 하나의 매개 변수가됩니다. 내가 실제로 가지고있는 것은 ./first "foo bar"뭔가 "something else"와 같습니다. –

0

IFS는 친구입니다.

#!/bin/bash 
# first script 
ARGS="[email protected]" 
IFS=$(echo -en "\n\b") 
./second $ARGS 

IFS는

+1

bash에서는 [ANSI-C quoting] (http://www.gnu.org/software/bash/manual/bashref.html#ANSI_002dC-Quoting)을 사용할 수 있습니다 :'IFS = $ '\ n \ b'' –