$@和$*的作用和区别

通过命令行传参时,$@和$* 都可以接收传的多个参数,是否有区别呢?

通过以下测试可以清晰的查看对比:

 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、当使用双引号的时候$@将传的每一个参数单独当成一个字符串,而$*将所有传的参数当成一个字符串。

  

原文地址:https://www.cnblogs.com/imdba/p/13323657.html