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

dog*_*ane 29 shell argument-passing

如何将一个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
Run Code Online (Sandbox Code Playgroud)

我希望它打印出来:

apple
pear orange
banana
Run Code Online (Sandbox Code Playgroud)

Zoo*_*ork 32

使用"$@"而不是$*保留引号:

./script2.sh "$@"
Run Code Online (Sandbox Code Playgroud)

更多信息:

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

$*
所有位置参数,看作一个单词

注意:必须引用"$*".

$ @
与$*相同,但每个参数都是带引号的字符串,也就是说,参数是完整传递的,没有解释或扩展.这意味着,参数列表中的每个参数都被视为一个单独的单词.

注意:当然,应该引用"$ @".