$@和$*的作用和区别

Posted Locutus

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了$@和$*的作用和区别相关的知识,希望对你有一定的参考价值。

脚本

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

#!/bin/bash

function test_args() 
    echo "不加双引号的时候\\$*和\\$@输出对比"
    echo "------------\\$*输出------------"
    echo $*
    echo "------------\\$@输出-----------"
    echo $@
    echo
    echo
    echo "使用双引号的时候\\$*和\\$@输出对比"
    
    echo "------------\\$*输出------------"
    for i in "$*"
    do
        echo $i
    done
    
    echo "------------\\$@输出------------"
    for j in "$@"
    do
        echo $j
    done



function main() 
    if [[ $# -le 1 ]];then
       echo "$0 调用时候参数太少,至少需要有2个参数,否则看不出效果哦!"
       exit
    else
       test_args $@
    fi


main $@

测试

# sh 1.sh
1.sh 调用时候参数太少,至少需要有2个参数,否则看不出效果哦!

# sh 1.sh 1
1.sh 调用时候参数太少,至少需要有2个参数,否则看不出效果哦!

不加双引号的时候, ∗ 和 *和 @输出对比

# sh 1.sh 1 2
------------$*输出------------
1 2
------------$@输出-----------
1 2

使用双引号的时候," ∗ " 和 " *"和" ""@"输出对比

------------"$*"输出------------
1 2
------------"$@"输出------------
1
2

结论

  • 当不用双引号的时候, @ 和 @和 @*效果是一样的
  • 当使用双引号的时候,$@将传的每一个参数单独当成一个字符串,而$*将所有传入的参数当成一个字符串

以上是关于$@和$*的作用和区别的主要内容,如果未能解决你的问题,请参考以下文章

Hibernate inverse和cascade的作用和区别

constlet和var的区别

$@和$*的作用和区别

$@和$*的作用和区别

break和continue的区别和作用

“共享副作用”和“共享资源”的区别