在shell脚本之间传递参数,但保留引号

问题描述:

如何将一个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

使用"[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