=================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
$?
代表上一个命令执行后的退出状态

随机推荐

  1. css 手机适配

    手淘H5移动端适配方案flexible源码分析   移动端适配一直是一个值得探讨的问题,在业余时间我找了一些页面,查看了一些厂商对于移动端H5页面的适配方案,看到了几个典型的例子,今天就来记录一下我看 ...

  2. asp.net c# repeater或gridview导出EXCEL的详细代码。

    Response.Clear(); Response.Charset = "GB2312"; Response.ContentEncoding = System.Text.Enco ...

  3. tftp

    Ubuntu 12.04 tftp 设置 1.sudo apt-get install tftp-hpa tftpd-hpa 2.修改/etc/default/tftpd-hpa TFTP_USERN ...

  4. selenium 如何处理table

    qi_ling2005  http://jarvi.iteye.com/blog/1477837 andyguo  http://blog.csdn.net/gzh0222/article/detai ...

  5. 本文将详细介绍oracle 10g OEM常规错误

    本文将详细介绍oracle 10g OEM常规错误-------Unknown host specified解决方法,需要了解的朋友可以参考下 详细出处参考:http://www.jb51.net/a ...

  6. 改造phpcms-v9自带的字符串截取函数

    1.phpcms-v9自带的字符串截取函数在phpcms/libs/functions/global.func.php文件中: /** * 字符截取 支持UTF8/GBK * @param $stri ...

  7. python中如何将字符串连接在一起,多倍的字符串如何输出

    说明: 在python中,如果有多个字符串,想要连接在一起,或者说想要拼接在一起该如何操作,在此记录下. 操作过程: 1.通过 + 这个加号操作符,将字符串拼接在一起 >>> &qu ...

  8. office转换成pdf

    import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import j ...

  9. hibernate 之 sql查询

    如果用hibernate执行原生sql进行数据查询可以调用 SQLQuery query = getSession().createSQLQuery(sql); 然后再执行 query.list() ...

  10. 【java】 java SPI

    SPI(Service provider interface)是旨在由第三方实现或扩展的API.它可以用于启用框架扩展和可替换组件. 服务是一组众所周知的接口或(通常是抽象的)类.服务提供者是服务的特 ...