$*和$@都是用来一次性获取所有脚本参数或者函数参数的,参数都会以字符串的形式返回,如下所示。
#下面是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