免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1768 | 回复: 3
打印 上一主题 下一主题

关于位置参数$*和$@ [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-06-20 02:12 |只看该作者 |倒序浏览
网上查到的有关$*和$@的说法:

$*:所有的位置参数,被作为一个单词.注意:"$*"必须被""引用.

$@:与$*同义,但是每个参数都是一个独立的""引用字串,这就意味着参数被完整地传递,并没有被解释和扩展.这也意味着,每个参数列表中的每个参数都被当成一个独立的单词.注意:"$@"必须被引用.

以下是我写的一个测试代码:
#!/bin/bash
# 测试位置参数 $* 和 $@

if [ -z "$1" ]
then
        echo "Usage : `basename $0` argument1 argument2 etc."
        exit 1
fi

arg1=$*
arg2="$*"
arg3=$@
arg4="$@"
echo -e "$arg1\n$arg2"
echo -e "$arg3\n$arg4"

index=0
for arg in $*;
do
        let "index+=1"
        echo "#$index = $arg"
done

index=0
for arg in "$*";
do
        let "index+=1"
        echo "#$index = $arg"
done

index=0
for arg in $@
do
        let "index+=1"
        echo "#$index = $arg"
done

index=0
for arg in "$@"
do
        let "index+=1"
        echo "#$index = $arg"
done


刚学SHELL编程,可能对上面两句话的理解不够,有以下疑问,大家看在小弟在深夜2点多还在学习的份上,给解惑下吧:
1. $* 和 $@ 不用 " 引用似乎也能正常使用,哪在什么情况下或是用什么样的参数调用此脚本时才会出错
2. 从上面的脚本运行结果可以看到 $* 在不加 " 时每个参数是独立分开的,而如果加 " 才是所有的整体,$@ 加不加 " 每个参数都是一个单独的单词

论坛徽章:
0
2 [报告]
发表于 2009-06-20 11:51 |只看该作者
以经回经
看看置顶贴十三问

论坛徽章:
0
3 [报告]
发表于 2009-06-20 15:04 |只看该作者
嗯,正在看着学习

论坛徽章:
0
4 [报告]
发表于 2009-06-20 16:39 |只看该作者
其实看英文版的文档最明白了,有时候翻译会找不到合适的词
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP