$@和 $*-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
$?
代表上一个命令执行后的退出状态
随机推荐
- 精挑细选 8款HTML5/jQuery应用助网站走向高上大
在WEB3.0的时代,我们的网站不仅要实现实用价值,更要为用户设计优秀的用户体验.jQuery是一个不错的JS框架,结合目前最新的HTML5技术,我们可以将自己的网站脱胎换骨,立马走向高上大,至少在前 ...
- PostgreSQL安装入门教程
一.安装 首先,安装PostgreSQL客户端. sudo apt-get install postgresql-client 然后,安装PostgreSQL服务器. sudo apt-get ins ...
- 原理分析之一:从JDBC到Mybatis
原理分析之一:从JDBC到Mybatis Mybatis学习(一)原生态的JDBC编程总结 -----系列 深入浅出MyBatis-快速入门
- windows reload()
reload() 方法用于重新加载当前文档.如果该方法没有规定参数,或者参数是 false,它就会用 HTTP 头 If-Modified-Since 来检测服务器上的文档是否已改变.如果文档已改变, ...
- 从debian9、ubuntu18.04的deb包依赖来看,似乎不是那么好!!
i386体系的依赖.典型的libuuid1依赖问题,需要downgrade保持版本一致! amd64的rpm依赖低版本的perl-base,需要downgrade保持版本一致!
- 手动安装Laravel
http://www.golaravel.com/download/ 下载即可用 注意 wamp必须要在 2.5以上
- phoenix连接hbase数据库,创建二级索引报错:Error: org.apache.phoenix.exception.PhoenixIOException: Failed after attempts=36, exceptions: Tue Mar 06 10:32:02 CST 2018, null, java.net.SocketTimeoutException: callTimeou
v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} w\:* {behavior:url(#default#VM ...
- 使用Matplotlib画图系列(一)
实现一个最简单的plot函数调用: import matplotlib.pyplot as plt y=pp.DS.Transac_open # 设置y轴数据,以数组形式提供 x=len(y) # 设 ...
- Oauth2.0(二):开放平台
上一节说到Oauth2.0 的交互模型.模型涉及到三方:资源拥有者.客户端.服务提供方.其中,服务提供方包含两个角色:鉴权服务器和资源服务器.鉴权服务器负责对用户进行认证,并授权给客户端权限.认证这一 ...
- Hibernate_day02讲义_使用Hibernate完成CRM客户管理中查询所有客户的操作