shell中$@和$*区别

$@指所有命令行参数,每个参数以""包围

$*指所有命令行参数

 

以下程序:

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@

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值