$@指所有命令行参数,每个参数以""包围
$*指所有命令行参数
以下程序:
test1.sh
-------------------
sum=0
for var
in "$@"
do
let sum=sum+$var
done
echo "sum=$sum"
./test1.sh 1 2 3
结果为sum=6
test2.sh
--------------------
sum=0
for var
in "$*"
do
let sum=sum+$var
done
echo "sum=$sum"
./test2.sh 1 2 3
结果为sum=1
分析一:
bash -x test1.sh
结果如下:
+ sum=0
+ for var in ' "$@" '
+ let sum=sum+1
+ for var in ' "$@" '
+ let sum=sum+2
+ for var in ' "$@" '
+ let sum=sum+3
+ echo sum=6
sum=6
可以看出for执行了三次,说明for是以""为边界的,因为每个参数是以""被包围的
分析二:
bash -x test2.sh
结果如下:
+ sum=0
+ for var in '"$*"'
+ let sum=sum+1 2 3
+ echo sum=1
sum=1
可以看出循环只执行了一次,说明$*整体是以""包围的,不是每个参数被""包围,因此只执行一次
一个更直接的例子是:
for var
in "a b c"
do
echo "${var}@"
done
打印:
a b c@
for var
in "a" "b" "c"
do
echo "${var}@"
done
打印:
a@
b@
c@