2010-12-31 3 views
7

다른 것들 중에서도 모든 인수를 그대로 다른 프로그램으로 전달해야하는 bash 스크립트를 작성해야합니다.

최소 예 :

 
$ cat >proxy.sh 
#!/bin/bash 

./script.sh [email protected] 
^D 

$ chmod +x proxy.sh 

$ cat >script.sh 
#!/bin/bash 

echo one $1 
echo two $2 
echo three $3 
^D 

$ chmod +x script.sh 

이 순진한 접근 방식은 공백으로 인수 작동하지 않습니다 예상

 
$ ./proxy.sh "a b" c 
one a 
two b 
three c 

: 나는이에 대한 proxy.sh에 작성해야 무엇

 
$ ./proxy.sh "a b" c 
one a b 
two c 
three 

우연히 있다?

별칭을 사용할 수 없습니다. proxy.sh은 스크립트 여야합니다. script.sh을 호출하기 전에 몇 가지 작업을 수행합니다. 그것을 "[email protected]"

+1

을 그게 오타예요? 무슨 말하려고 한거야? – Mehrdad

+0

"... 모든 인수를 전달해야합니다 ..."고정되어, 죄송합니다. –

답변

11

견적 [email protected] :

$ cat >proxy.sh 
#!/bin/bash 

./script.sh "[email protected]" 
^D 

그런 다음 원래 따옴표 유지 ". ... 다른 프로그램에 그대로 모든 인수를해야한다"

one a b 
two c 
three 
+0

감사합니다. 나는 이것이 모든 인수를 하나에 붙일 것이라고 생각했다. Bash 구문을 읽을 필요가있다. –

+5

이것은 맞습니다. '$ @'는 항상 따옴표로 묶여야만합니다. 그렇지 않으면 원하는 것을하지 않습니다 (대개는 버그 인'$ *'와 동일합니다). – psmears

+3

공백을 유지하려면 다른 모든 변수를 "큰 따옴표"로 묶어야합니다. 드문 경우를 제외하고는'$ var' 대신 항상''$ var ''라고 써주십시오. –

관련 문제