• Linux Shell 05 位置变量(命令行参数)


    在Linux shell 脚本中可能会用到一些命令行参数,常见如下:

      $0:脚本名称

      $#:执行脚本时传入的参数个数,不包括脚本名称

      $@:所有参数

      $*:所有参数

      $1...$9:第1个参数......第9个参数

      $?:不属于位置变量,只是形式上比较相似;表示命令执行的退出状态(正常退出为0)

      1.示例

    #!/bin/bash
    
    echo "file name:"$0
    echo "There are $# parameters"
    
    echo '"$*":'
    for var in "$*"
    do
        echo $var
    done
    
    echo '$*:'
    for var in $*
    do
        echo $var
    done
    
    echo '"$@":'
    for var in "$@"
    do
        echo $var
    done
    
    echo '$@:'
    for var in $@
    do
        echo $var
    done

    2. 输出结果:

    file name:./position.sh    # $0
    There are 3 parameters   # $#
    
    "$*": 
    adams byron clark       # 遍历"$*":只有一条记录
    $* :               # 遍历$* : 三条记录
    adams              
    byron
    clark
    
    "$@" :
    adams              # 遍历"$@" : 三条记录
    byron
    clark
    $@ :               # 遍历$@ : 三条记录
    adams
    byron
    clark

    3. $@和$*的区别

      a.不加双引号时$@  $*:二者均为以空格分隔,由参数组成的一个字符串。 上例中为"Adams" "byron" "clark"

      b. 加双引号时:

        "$@" 指 "Adams" "byron" "clark"

        "$*" 指"Adams byron clark" (以默认的IFS连接为一个字符串)

      c. 不论是否加双引号:$@的展开值是不变的

      d. 加单引号,则'$@', '$*'不会被解析成位置变量

        

  • 相关阅读:
    导出htmlcleaner
    备份
    本地win7搭建SVN
    nutch 导入ecl
    linux 启动nutch
    c++中的构造函数前加上explicit
    string::erase的使用心得
    C++的static关键字(转载)
    Boot Trigger
    strtol()详解
  • 原文地址:https://www.cnblogs.com/techroad4ca/p/5444412.html
Copyright © 2020-2023  润新知