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

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

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

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

sh test.sh a b c d

最终的得到的结果如下:

[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个参数,却只循环遍历了一次;不加双引号,作用与$@相同。
4)一般使用时,尽量还是在echo后面给输出的内容加上引号,一方面是为了更加规范,另一方面是,让我们所写的变量或者特殊符号去发挥它本应起到的作用,就像$@$*一样。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值