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

  • 相关阅读:
    工欲善其事,必先利其器
    年度总结
    人脸解锁从底层到上层(一)
    Hexo NexT 主题添加评论和文章阅读量
    摄影历程-第一章
    西藏之旅
    软件测试和评估
    WordCount优化
    WordCount编码与测试
    值得深入思考的五个问题
  • 原文地址:https://www.cnblogs.com/horizonli/p/5246066.html
Copyright © 2011-2022 走看看