如果想用一个shell脚本把输入参数完整的传给另一个脚本,特别遇到以下这种情况的时候./a.sh 'test 1' 'test 2'。此时就需要使用$@,而不是$*来完成需求。具体运行一下以下脚本就清楚这两条命令之间的区别了。
b.sh
echo pn:$# echo p: $* echo p: $@
a.sh
echo $# echo './b.sh $*' ./b.sh $* echo './b.sh $@' ./b.sh $@ echo './b.sh "$*"' ./b.sh "$*" echo './b.sh "$@"' ./b.sh "$@"
运行./a.sh 'a b' c d
输出结果为
3
./b.sh $*
pn:4
p: a b c d
p: a b c d
./b.sh $@
pn:4
p: a b c d
p: a b c d
./b.sh "$*"
pn:1
p: a b c d
p: a b c d
./b.sh "$@"
pn:3
p: a b c d
p: a b c d