$@和 $*-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:
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:
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:
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:
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:
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:
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
$?
代表上一个命令执行后的退出状态
随机推荐
- 小程序笔记四:表单提交form
index.wxml代码 <form bindsubmit="formSubmit" bindreset="formReset"> <view ...
- koa使用koa-passport实现路由进入前登录验证
现在的项目需求很简单,当进入一个页面的时候,如果没登录,则跳转到登录页面,如果登录了则直接到对应页面. koa2写的项目,使用koa-passport,koa-session,根据koa-passpo ...
- Java中级面试题及答案整理
1.webservice是什么? webservice是一种跨编程语言和跨操作系统的远程调用技术,遵循SOPA/WSDL规范. 2.springCloud是什么? springcloud是一个微服务框 ...
- python06 深浅拷贝原理
preface 这里主要说深浅拷贝的原理.首先说说数字与字符串作为内存对象的重用,请看代码: a1=12345 b1=12345 a2=a1 print(id(a1),id(b1),id(a2)) 打 ...
- Python游戏《外星人入侵》来了~
在游戏<外星人入侵>中,玩家控制着一艘最初出现在屏幕底部中央的飞船.玩家可以使用箭头键左右移动飞船,还可使用空格键进行射击.游戏开始时,一群外星人出现在天空中,他们在屏幕中向下移动.玩家的 ...
- numpy和Matplotlib篇---2
原创博文,转载请标明出处--周学伟http://www.cnblogs.com/zxouxuewei/ 5.3 Python的科学计算包 - Numpy numpy(Numerical Python ...
- c# 匿名反序列化
1.先new一个匿名对象,然后再反序列化好处是能点点点,坏处是得先new匿名对象 2.借用Newtonsoft.Json.Linq.JObject.Parse,好处是不需要new匿名对象,坏处是不能点 ...
- 8 -- 深入使用Spring -- 1...4 属性占位符配置器
8.1.4 属性占位符配置器 PropertyPlaceholderConfigurer 是一个容器后处理器,负责读取Properties属性文件里的属性值,并将这些属性值设置成Spring配置文件的 ...
- 【Android】Android中如何取消调转界面后EditText默认获取聚焦问题
参考资料: https://www.cnblogs.com/dream-cichan/p/aaaa.html http://blog.csdn.net/u013703461/article/detai ...
- 【代码审计】CLTPHP_v5.5.3后台目录遍历漏洞分析
0x00 环境准备 CLTPHP官网:http://www.cltphp.com 网站源码版本:CLTPHP内容管理系统5.5.3版本 程序源码下载:https://gitee.com/chich ...