2015-01-29 2 views
0

한 쉘 스크립트 (예 : script1)에서 다른 쉘 스크립트로 인수를 전달하려고합니다. 인수 중 일부는 공백을 포함합니다. 그래서 나는 인수에 따옴표를 포함 시켰고 script2로 넘어 가기 전에 그것을 인용했습니다. 여기가,쉘 스크립트가 공백으로 인수를 전달합니다.

echo $FL gives 
-filelist "/Users/armv7/My build/normal/My build.LinkFilelist" -filelist "/Users/arm64/My build/normal/My build.LinkFilelist" 

방법입니다하지만

script2 -arch armv7 -arch arm64 -isysroot /Applications/blahblah/iPhoneOS8.1.sdk $FL 

내가 할 경우 script2에서

를 수행 할 때

for var in "[email protected]" 
    do 
     echo "$var" 
    done 

나는 여전히

"-arch" 
"armv7" 
"-arch" 
"arm64" 
"isysroot" 
"/Applications/blahblah/iPhoneOS8.1.sdk" 
"-filelist" 
""/Users/armv7/My" 
"build/normal/My"   // I want all these 3 lines together 
build.LinkFilelist"" 
"-filelist" 
""/Users/arm64/My" 
"build/normal/My" 
build.LinkFilelist"" 

를 얻을 수 있습니다 누군가 제 실수를 바로 잡으시겠습니까? 언급 된 논점 전체를 얻으려면 어떻게해야합니까?

+1

http://mywiki.wooledge.org/BashFAQ/050 변수 안에 인용 된 문자열을 고수하고 그들이 일을 기대하지 마십시오을, 그들은하지 않을 것이다. 인수를 직접 전달하십시오. –

+0

FL 변수는 어떻게 설정합니까? 이와 같이 -filelist/Users/armv7/내 빌드/일반/내 build.LinkFilelist - 파일 목록/사용자/arm64/내 빌드/일반/내 build.LinkFilelist? – Theguy

답변

0

1을 사용하여 다음 (FL 주위에 "")를 넣어 :

script2 -arch armv7 -arch arm64 -isysroot /Applications/blahblah/iPhoneOS8.1.sdk "$FL" 

2 다음 (당신이 알고있는 형식에 따라 변수를 추출하는) 당신의 script2 사용 내부 :

for arg; do # default for a for loop is to iterate over "[email protected]" 
    case $arg in 
    '-filelist'*) input=${arg} ;; 
     esac 
done 

3 이제 awk을 사용하여 원하는 형식으로 입력 매개 변수를 나눌 수 있습니다.

2

따옴표를 변수 값에 포함해도 아무런 효과가 없습니다. @ Rean이 말한대로 http://mywiki.wooledge.org/BashFAQ/050을 참조하십시오. 이 경우, 가장 좋은 대답은 오히려 일반 변수보다 배열로 FL을 저장하는 데 아마도 : 따옴표가 배열 요소의 일부로 저장되지 않습니다

FL=(-filelist "/Users/armv7/My build/normal/My build.LinkFilelist" -filelist "/Users/arm64/My build/normal/My build.LinkFilelist") 

참고; 대신 경로를 공간으로 구분하지 않고 단일 배열 요소로 처리하도록합니다. 그런 다음 배쉬는 인수로 각 요소를 처리하게하는, "${FL[@]}"으로 참조 :

script2 -arch armv7 -arch arm64 -isysroot /Applications/blahblah/iPhoneOS8.1.sdk "${FL[@]}" 
관련 문제