$@和 $*-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
$?
代表上一个命令执行后的退出状态
随机推荐
- css 手机适配
手淘H5移动端适配方案flexible源码分析 移动端适配一直是一个值得探讨的问题,在业余时间我找了一些页面,查看了一些厂商对于移动端H5页面的适配方案,看到了几个典型的例子,今天就来记录一下我看 ...
- asp.net c# repeater或gridview导出EXCEL的详细代码。
Response.Clear(); Response.Charset = "GB2312"; Response.ContentEncoding = System.Text.Enco ...
- tftp
Ubuntu 12.04 tftp 设置 1.sudo apt-get install tftp-hpa tftpd-hpa 2.修改/etc/default/tftpd-hpa TFTP_USERN ...
- selenium 如何处理table
qi_ling2005 http://jarvi.iteye.com/blog/1477837 andyguo http://blog.csdn.net/gzh0222/article/detai ...
- 本文将详细介绍oracle 10g OEM常规错误
本文将详细介绍oracle 10g OEM常规错误-------Unknown host specified解决方法,需要了解的朋友可以参考下 详细出处参考:http://www.jb51.net/a ...
- 改造phpcms-v9自带的字符串截取函数
1.phpcms-v9自带的字符串截取函数在phpcms/libs/functions/global.func.php文件中: /** * 字符截取 支持UTF8/GBK * @param $stri ...
- python中如何将字符串连接在一起,多倍的字符串如何输出
说明: 在python中,如果有多个字符串,想要连接在一起,或者说想要拼接在一起该如何操作,在此记录下. 操作过程: 1.通过 + 这个加号操作符,将字符串拼接在一起 >>> &qu ...
- office转换成pdf
import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import j ...
- hibernate 之 sql查询
如果用hibernate执行原生sql进行数据查询可以调用 SQLQuery query = getSession().createSQLQuery(sql); 然后再执行 query.list() ...
- 【java】 java SPI
SPI(Service provider interface)是旨在由第三方实现或扩展的API.它可以用于启用框架扩展和可替换组件. 服务是一组众所周知的接口或(通常是抽象的)类.服务提供者是服务的特 ...