当前位置:   article > 正文

论 $*、$@、"$*"、"$@"的区别

$@

论 $*、$@、"$*"、"$@"的区别


$* 和 $@ 都表示传递给函数或脚本的所有参数

至于区别,先来看shell代码和执行结果

cd /home/hadoop/shell/examples
vim paramter2.sh
  • 1
  • 2

文件内容为:

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

执行shell脚本【首先明确一点:给shell传入参数时,多个参数间是用空格隔开的】

cd /home/hadoop/shell/examples
sh paramter2.sh "abcdef" yyy
sh paramter2.sh "abc def" yyy
sh paramter2.sh "abc def  ghi" yyy
sh paramter2.sh " abc def  ghi" yyy
sh paramter2.sh " abc def  ghi " yyy
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

执行结果:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
从上面执行结果来看:
1)echo 直接输出$*、$@、" ∗ " 、 " *"、" ""@" ,它们之间是有区别的,都是将所有参数用空格连接成一份数据.连接前有些参数被处理过,有些没被处理,后面会给出总结。

使用 for 循环来逐个输出数据,更能看出区别来。
2)不被双引号""包围的 ∗ 和 *和 @ 是逐个对参数内部再按空格拆分,并去掉前后空格,然后连接在一起表示所有参数,遍历出来的参数个数和参数值都有可能跟输入时不一样了。
sh paramter2.sh " abc def ghi " yyy命令中,有两个参数。
第一个参数" abc def ghi "实际上是由3个字符串组成,abc与def之间有1个空格,def与ghi之间有2个空格,abc前面有1个空格,ghi后面有1个空格,会被处理成3个参数abcdefghi
第二个参数yyy,因为内部没有空格,前后也没空格,所以还是它自己。
所以被处理后的第一个参数分成了3个参数,加上第二个参数1个参数,一共4个参数,这4个参数空格连接在一起就是abc def ghi yyy

3)被双引号"“包围的”$*"、"$@“是把所有参数值原封不动(参数内部有空格不进行拆分,值前后的空格也都完整保留)的用空格连接成一份数据,只是”$*“连接成铁板一块,而”$@“还保留着连接点,还能获得某个完整参数值!!
sh paramter2.sh " abc def ghi " yyy命令中,有两个参数。
第一个参数" abc def ghi ",第二个参数yyy,用空格直接连接在一起为 abc def ghi yyy,这就是”$*"、"$@“的输出值。它们的差别在遍历的时候就能看出,”$*“只遍历出一个参数,即连接后的完整值,可以看出”$*“是将所有参数连接成铁板一块了;而”$@"遍历出2个参数,每个参数就是之前的参数输入值

总结:
1)$*、$@ 、"$*"、"$@“都表示传递给函数或脚本的所有参数,即都会将所有参数处理成一份数据。
2)不被双引号”"包围的$*和$@,会对每个参数进行处理,逢空格必拆开,去前后空格,最后会被处理的连爹妈都认不出来。可以说家教严格,稍带空格就会被修理,哈哈~~

3)被双引号"“包围的”$*"、"$@",不会对每个参数进行处理,而仅仅是将所有参数值原封不动的用空格连接成一份数据,只是"$*“连接成铁板一块,而”$@“还能获取到每个完整的参数值!!
所以”$*“是被合并的连爹妈都认不出来,而”$@"还能被爹妈准确认领出来的,哈哈!!

反正我就记忆完整性最好的是"$@",参数值唯一能被爹妈准确认领出来的。在生产上,也是用"$@"最多。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/154565
推荐阅读
相关标签
  

闽ICP备14008679号