zoukankan      html  css  js  c++  java
  • $@和 $*-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
    $?
    代表上一个命令执行后的退出状态

  • 相关阅读:
    笔记本硬盘接口SATA, PATA
    dB和dBm的区别
    SQL Server 存储过程分页方案比较
    SQL Server 输出参数OUTPUT
    安装iis5.1时找不到zClientm.exe的解决方法
    mac os x 10.5.8不通本网段
    SQL Server 存储过程分页大全(2005,2000)
    硬盘保修查询网站明细清单希捷硬盘保修查询西数硬盘保修查
    如何让SWT的窗口置顶(总在最上面)?
    ASP.NET(三) Web开发——常用服务器控件
  • 原文地址:https://www.cnblogs.com/horizonli/p/5246066.html
Copyright © 2011-2022 走看看