$@和 $*-linux_Shell
=================1.问题=======
在使用$@和 $*的时候有时候会混淆。
================2.实践出真知=====
分别用三种参数设置:
"a b c" "a" "b" "c" a b c
2.0先看$@,编写测试脚本
root@ubuntu:/tmp# vim demo.sh #/bin/bash echo "\$@=$@" echo "\$*=$*" echo "The Number Of Parameter:$#" for var in "$@" <===主要变化在这里 do echo "${var}@" done
2.1测试"a b c",结果为 a b c@ ===>"a b c" 是一个参数
root@ubuntu:/tmp# ./demo.sh "a b c" $@=a b c $*=a b c The Number Of Parameter:1 a b c@
2.2测试"a" "b" "c",结果为
a@
b@
c@ ===>"a" "b" "c" 为三个参数
root@ubuntu:/tmp# ./demo.sh "a" "b" "c" $@=a b c $*=a b c The Number Of Parameter:3 a@ b@ c@
2.3测试a b c,结果为
a@ b@ c@ ===> "a" "b" "c" 为三个参数
root@ubuntu:/tmp# ./demo.sh a b c $@=a b c $*=a b c The Number Of Parameter:3 a@ b@ c@
3.0 测试$*,修改脚本如下
root@ubuntu:/tmp# vim demo.sh #/bin/bash echo "\$@=$@" echo "\$*=$*" echo "The Number Of Parameter:$#" for var in "$*" <===主要修改在这 do echo "${var}@" done
3.1测试"a b c",结果为 a b c@
root@ubuntu:/tmp# ./demo.sh "a b c" $@=a b c $*=a b c The Number Of Parameter:1 a b c@
3.2测试"a" "b" "c",结果为
root@ubuntu:/tmp# ./demo.sh "a" "b" "c" $@=a b c $*=a b c The Number Of Parameter:3 a b c@
3.3测试a b c,结果为
root@ubuntu:/tmp# ./demo.sh a b c $@=a b c $*=a b c The Number Of Parameter:3 a b c@
=====================3.总结===================
结论:不管参数的个数有多少个,或者是否加双引号(“”),在for循环下 for var in "$*" 中的$*都表示一个参数,也只执行一次循环(如果想查看执行了多少次循环,执行脚本的时候使用 bash -x 脚本文件名)
在for循环中使用$@和$* | $@ | $* |
"a b c" | a b c@ | a b c@ |
"a" "b" "c" | a@ b@ c@ |
a b c@ |
a b c | a@ b@ c@ |
a b c@ |
==================4.收工========================
扩展:
shell中的特殊变量:
变量名
含义
$0
shell或shell脚本的名字
$*
以一对双引号给出参数列表
$@
将各个参数分别加双引号返回
$#
参数的个数
$_
代表上一个命令的最后一个参数
$$
代表所在命令的PID
$!
代表最后执行的后台命令的PID
$?
代表上一个命令执行后的退出状态
作者:horizonli
出处:http://www.cnblogs.com/horizonli/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
如果您认为文章还不错或者有所收获,您可以通过扫描下方的二维码进行随性打赏(¥1/¥2/¥5)以及点击左下角的【好文要顶】按钮以示支持,或者扫描关注即将写作的公众号二维码,因为这几种方式都是支持我继续写作,分享的最大动力!公众号将记录工作生活,技术内容,个性观点等内容,欢迎您的关注
出处:http://www.cnblogs.com/horizonli/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
支付宝(alipay) 二维码打赏 |
微信(wechat) 二维码打赏 JUST LI(**波) |
微信公众号: 木子李的菜田 |