• $@和$*的作用和区别


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

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

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

      

  • 相关阅读:
    P2149 [SDOI2009]Elaxia的路线
    电机学第一次课
    大素数区间快判模板
    网络流 最大权闭合子图
    DFS CCPC2017 南宁I题
    稳定婚姻问题模板
    CF438D 线段树 区间求和,区间求膜,单点更新
    对偶图 并查集 BZOJ4423
    BZOJ 1833 数字计数 数位DP
    过一点求对一个直线的垂足
  • 原文地址:https://www.cnblogs.com/imdba/p/13323657.html
Copyright © 2020-2023  润新知