如果想用一个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

本文介绍如何在Shell脚本中正确地将参数从一个脚本传递到另一个脚本,重点对比了$*与$@的区别及应用。通过示例演示了如何保持参数的完整性,尤其是在遇到带空格的参数时。
1098

被折叠的 条评论
为什么被折叠?



