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

  • 相关阅读:
    hdu4930 Fighting the Landlords(模拟 多校6)
    hdu4888 多校B 最大流以及最大流唯一推断+输出方案
    xUtils介绍 -- DbUtils、ViewUtils、HttpUtils、BitmapUtils
    java 读取properties文件
    poj1062昂贵的聘礼
    杭电 HDU 2717 Catch That Cow
    iOS使用自己定义字体
    Elasticsearch 2014年10月简报
    html 上下左右都居中
    Linux 比较判断运算(if else)
  • 原文地址:https://www.cnblogs.com/horizonli/p/5246066.html
Copyright © 2011-2022 走看看