shell脚本中$*和$@的区别

       $*和$@都是用来一次性获取所有脚本参数或者函数参数的,参数都会以字符串的形式返回,如下所示。

#下面是example.sh脚本的代码

#!/bin/bash
s1=$*
s2=$@
echo $s1
echo $s2
for i in $s1;do
    echo $i
done
for i in $s2;do
    echo $i
done



       然后我们用下面的方式运行脚本,或得到相应的输出,如下所示。可以看到,$*和$@两者目前没有体现出任何区别。

./example.sh 1 2 3

##输出如下所示
1 2 3
1 2 3
1
2
3
1
2
3

       实际上$*和$@的区别只体现在循环语境下的双引号引用与否。即在循环语境下,如果是以"$*"的方式获取参数,那么参数将以单个字符串的方式传给循环,所以循环中只会循环一次,并且循环变量i的值是所有参数组成的单个字符串;如果是以"$@"的方式获取参数的话,那么参数将逐个传给循环,所以循环的次数是参数个数,并且每次循环的变量i的值就是相应的参数值。如下所示。

#下面是example.sh脚本的代码

#!/bin/bash
for i in "$*";do
    echo $i
done
for i in "$@";do
    echo $i
done

       上面脚本的运行以及输出如下所示。

./example.sh 1 2 3

##输出如下所示
1 2 3
1
2
3

猜你喜欢

转载自blog.csdn.net/S_o_l_o_n/article/details/108385949