本博客已迁往http://coredumper.cn
$@和$*都代表所有命令行参数,但是二者是有区别的。
$*将命令行上提供的所有参数当作一个参数来保存,$@将命令行上提供的所有参数当作一个字符串中的多个独立的参数来保存。
通常都是在程序中使用$@,并且用双引号引起来。下面举例说明:
以下5个程序的程序名都是test.sh,均执行如下命令:
sh test.sh a b "c d"
希望得到的输出是:
a
b
c d
程序1
for var in $*
do
echo $var
done
输出:
a
b
c
d
程序2
for var in $@
do
echo $var
done
输出:
a
b
c
d
程序3
for var in "$*"
do
echo $var
done
输出:
a b c d
程序4
for var in "$@"
do
echo $var
done
输出:
a
b
c d
程序5
while [ -n "$1" ]
do
echo $1
shift
done
输出:
a
b
c d
只有最后两个程序得到了期望的结果,可以看出双引号的作用是很重要的。