通过命令行传参时,$@和$* 都可以接收传的多个参数,是否有区别呢?
通过以下测试可以清晰的查看对比:
1 #!/bin/bash 2 3 4 function test_args() 5 { 6 echo "不加双引号的时候$*和$@输出对比" 7 echo "------------$*输出------------" 8 echo $* 9 echo "------------$@输出-----------" 10 echo $@ 11 echo 12 echo 13 echo "使用双引号的时候$*和$@输出对比" 14 echo "------------$*输出------------" 15 for i in "$*" 16 do 17 echo $i 18 done 19 echo "------------$@输出------------" 20 for j in "$@" 21 do 22 echo $j 23 done 24 } 25 26 27 function main() 28 { 29 if [[ $# -le 1 ]];then 30 echo "$0 调用时候参数太少,至少需要有2个参数,否则看不出效果哦!" 31 exit 32 else 33 test_args $@ 34 fi 35 } 36 37 main $@
测试:
[root@tidb61 ~]# sh 1.sh 1.sh 调用时候参数太少,至少需要有2个参数,否则看不出效果哦! [root@tidb61 ~]# sh 1.sh 1 1.sh 调用时候参数太少,至少需要有2个参数,否则看不出效果哦! [root@tidb61 ~]# sh 1.sh 1 2 不加双引号的时候$*和$@输出对比 ------------$*输出------------ 1 2 ------------$@输出----------- 1 2 使用双引号的时候$*和$@输出对比 ------------$*输出------------ 1 2 ------------$@输出------------ 1 2 [root@tidb61 ~]#
结论:
1、当不用双引号的时候$@和$*效果是一样的。
2、当使用双引号的时候$@将传的每一个参数单独当成一个字符串,而$*将所有传的参数当成一个字符串。