2009-12-31 494 views
27

如何將一個shell腳本的所有參數傳遞給另一個腳本?我試過$ *,但正如我所料,如果您引用了參數,則這不起作用。在shell腳本之間傳遞參數,但保留引號

例子:

$ cat script1.sh 

#! /bin/sh 
./script2.sh $* 

$ cat script2.sh 

#! /bin/sh 
echo $1 
echo $2 
echo $3 

$ script1.sh apple "pear orange" banana 
apple 
pear 
orange 

我希望它打印出來:

apple 
pear orange 
banana 
+2

請參閱http://stackoverflow.com/questions/255898/(稍有不同的問題 - 但答案是「$ @」就像這裏一樣)。 – 2009-12-31 21:45:02

+0

我從中學到了很多,謝謝! – dogbane 2009-12-31 21:59:48

回答

30

使用"[email protected]"代替$*保留引號:

./script2.sh "[email protected]" 

更多信息:

http://tldp.org/LDP/abs/html/internalvariables.html

$ *
所有的位置參數,視爲一個詞

注: 「$ *」 必須被引用。

$ @
與$ *,但是每個參數是一個帶引號的字符串,也就是 參數上完整傳遞,沒有解釋或擴展。 這意味着,除其他外,參數 列表中的每個參數都被視爲單獨的單詞。

注意:當然,應該引用「$ @」。

+0

謝謝,這工作。 – dogbane 2009-12-31 22:00:50

+0

我認爲括號存在問題 - 我遇到了問題,無法自己解決。 – Penz 2015-12-25 22:32:19