shell 中的$*和$@为什么是相同的

sh/bash/dash/ksh/zsh等Shell脚本
回复
startfly
帖子: 3
注册时间: 2011-04-03 9:42
送出感谢: 0
接收感谢: 0

shell 中的$*和$@为什么是相同的

#1

帖子 startfly » 2011-04-04 11:31

wyf@wyf-laptop:~/lab/wyf28$ cat test2
#!/bin/bash

count=1
for param in $*
do
echo '$*' Parameter '#'$count = $param
count=$[$count+1]
done

count=1
for param1 in $@
do
echo '$@' Parameter '#'$count = $param1
count=$[$count+1]
done
wyf@wyf-laptop:~/lab/wyf28$ ./test2 I have a question
$* Parameter #1 = I
$* Parameter #2 = have
$* Parameter #3 = a
$* Parameter #4 = question
$@ Parameter #1 = I
$@ Parameter #2 = have
$@ Parameter #3 = a
$@ Parameter #4 = question
这里$*没有把所有的参数当作一个参数,也允许对其中的值进行迭代
但是如果进行如下修改:for param in "$*"
则:
wyf@wyf-laptop:~/lab/wyf28$ ./test2 I have a question
$* Parameter #1 = I have a question
$@ Parameter #1 = I
$@ Parameter #2 = have
$@ Parameter #3 = a
$@ Parameter #4 = question
这是为什么?
头像
灰色小狼
帖子: 4573
注册时间: 2008-12-06 10:38
系统: Arch
送出感谢: 21 次
接收感谢: 30 次

Re: shell 中的$*和$@为什么是相同的

#2

帖子 灰色小狼 » 2011-04-04 11:57

"$*"读取所有参数并返回一个字符串
tusooa
帖子: 6546
注册时间: 2008-10-31 22:12
系统: 践兔
送出感谢: 6 次
接收感谢: 10 次
联系:

Re: shell 中的$*和$@为什么是相同的

#3

帖子 tusooa » 2011-04-05 7:51

一般不用$*,在for里边,一般都是$@加上双引号。

代码: 全选

] ls -ld //
回复

回到 “Shell脚本”