我们经常会在脚本中用到$@和$*这两个变量,但是可能许多人只是知道这两个变量存储的是所有的命令行参数,但是其具体差别并不一定知道。所以这里我用一个脚本实例来分析一下这两个变量的区别。

[root@www lianxi]# cat test.sh
#!/bin/bash
#Author: Helloween
#Description: hehe

echo "############"
echo '$@:'
for i in "$@"
do
    echo $i
done

echo "############"
echo '$*:'
for i in "$*"
do
    echo $i
done

echo "############"
echo '"1" "2" "3" "4" "5":'
for i in "1" "2" "3" "4" "5"
do
    echo $i
done

echo "############"
echo '"1 2 3 4 5":'
for i in "1 2 3 4 5"
do
    echo $i
done
echo "############"
[root@www lianxi]#

首先,这就是我要使用的脚本的内容。

现在,将脚本执行一下。

 

[root@www lianxi]# bash test.sh 1 2 3 4 5
############
$@:
1
2
3
4
5
############
$*:
1 2 3 4 5
############
"1" "2" "3" "4" "5":
1
2
3
4
5
############
"1 2 3 4 5":
1 2 3 4 5
############
[root@www lianxi]#

 

很容易看出第一个for循环和第三个循环、第二个for循环和第四个循环所输出的内容时一样的。其实$@与$*的区别就在循环列表中了。

$@:变量替换之后,会将所有命令行参数包含在分隔的文本值之中。比如:"1" "2" "3" "4" "5"。

$*:变量替换之后,会将所有的命令行参数包含在单个文本值之中。比如:"1 2 3 4 5"。

 

相信看到这里,大家也差不多能够理解这两个变量的区别了,希望这篇博客能帮助到大家。

以上纯属个人理解,如有不正之处,敬请指正。