2010-12-31 6 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 "a b" c 
one a b 
two c 
three 

私はこのためにproxy.shに何を書くべき起こる?

エイリアスを使用できないことに注意してください。proxy.shはスクリプトでなければなりません。script.shを呼び出す前にいくつかのことがあります。

+1

を "...別のプログラムへのすべての引数がそのまま必要があります。" - それはタイプミスですか?あなたは何を言いたいのですか? – Mehrdad

+0

"...はすべての引数を渡すべきです..."固定、申し訳ありません。 –

答えて

11

引用[email protected]、それ"[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 ''を書くようにしてください。 –

関連する問題