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

时间:2009-12-31 21:25:22

标签: 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

我希望它打印出来:

apple
pear orange
banana

1 个答案:

答案 0 :(得分:32)

使用"$@"代替$*来保留引号:

./script2.sh "$@"

更多信息:

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

  

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

     

注意:必须引用“$ *”。

     

$ @
  与$ *相同,但每个参数都是带引号的字符串,即   参数完整传递,无需解释或扩展。   除其他外,这意味着参数中的每个参数   列表被视为一个单独的词。

     

注意:当然,应该引用“$ @”。