• Shell中的$@和$*的区别


    我们都知道,在shell中 $@ 和 $* 都会获取传递给脚本或函数时所有的参数。
    但其中有细微区别。

    接下来,笔者将用一个shell脚本将其中的区别展现给大家。

    [root@master scripts]# cat test.sh 
    #!/bin/bash
    
    echo '单引号@是:$@'
    echo "双引号@是:$@"
    echo '单引号*是:$*'
    echo "双引号*是:$*"
    echo "@没有引号:"$@
    echo "*没有引号:"$*
    
    echo '这是双引号$@的遍历'
    for i in "$@"
    do
        echo $i
    done
    
    
    echo '这是没有引号$@的遍历'
    for i in $@
    do
        echo $i
    done
    
    echo '这是双引号$*的遍历'
    for i in "$*"
    do
        echo $i
    done
    
    echo '这是没有引号$*的遍历'
    for i in $*
    do
        echo $i
    done
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34

    在使用 echo 命令时,总共会有3中情况,不加引号、加单引号、加双引号。
    单引号的作用:所见即所得,不对内容作任何解析,输入什么,就输出什么。
    双引号的作用:对输入内容中的特殊符号进行解析。

    由于单引号最终的结果是将原内容重新输出,我们无法区分出 $@ 和 $* 的区别,在此处便没有讨论的意义,所以只有4个循环遍历的结构。

    接下来执行脚本,并传递给脚本4个参数 a b c d

    sh test.sh a b c d
    
    • 1

    最终的得到的结果如下:

    [root@master scripts]# sh test.sh a b c d
    单引号@是:$@
    双引号@是:a b c d
    单引号*是:$*
    双引号*是:a b c d
    @没有引号:a b c d
    *没有引号:a b c d
    这是双引号$@的遍历
    a
    b
    c
    d
    这是没有引号$@的遍历
    a
    b
    c
    d
    这是双引号$*的遍历
    a b c d
    这是没有引号$*的遍历
    a
    b
    c
    d
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    从执行脚本的结果我们不难发现:
    1)单引号对变量内容不会作任何解析,所见即所得。
    2)加双引号与不加双引号,$@会把所有传递的参数内容输出,并且每个参数个体都是独立的。如脚本结果所示,几个参数,就遍历循环几次。
    3)加双引号,$*会把所有传递的参数内容输出,并且将所有参数作为一个整体。如脚本结果所示,4个参数,却只循环遍历了一次;不加双引号,作用与$@相同。
    4)一般使用时,尽量还是在echo后面给输出的内容加上引号,一方面是为了更加规范,另一方面是,让我们所写的变量或者特殊符号去发挥它本应起到的作用,就像$@$*一样。

  • 相关阅读:
    Chapter 4 分类
    一定要会用selenium的等待,3种等待方式解读
    淘宝开店装修教程 (2023新版)
    Python 概念集合浅谈
    ubuntu22.04下hadoop3.3.6+hbase2.5.6+phoenix5.1.3开发环境搭建
    常见算法-汉诺塔(Hanoi)
    升级 Kubernetes 上的 TiDB 集群
    Windows环境下的ELK——logstash+elasticsearch(3)
    10/15/2022
    数字化安全生产平台 DPS 重磅发布
  • 原文地址:https://blog.csdn.net/oldboy1999/article/details/128130337