$@和$*的作用和区别

脚本

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

#!/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

结论

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值