shell脚本专家指南笔记#6_测试变量和设置默认值

##
# 本文为《shell脚本专家指南》一书的学习笔记。
##

6. 测试变量和设置默认值

6.1. 设置默认值
    设置变量默认值的几种形式,复杂程度递减。
    #
    if [ -z "$var" ]; then
      var="default"
    fi
    #
    [-z "$var" ] && var="default"
    #
    [ ! "$var" ] && var="default"
    #
    [ "$var" ] || var="default"

6.2. 变量替换
    := 句法
        如果var已定义,且为非空值,则直接返回var的值。
        否则为var赋值default,并且返回default。
        var=""
        echo ${var:="default"}  # 输出default 。
        echo $var  # 输出default 。
    = 句法
        若var已定义,则直接返回var的值。
        否则为var赋值default,并且返回default。
        var=""
        echo ${var="default"}  # 输出空。
        echo $var  # 输出空。
        unset var
        echo ${var="default"}  # 输出default 。
        echo $var  # 输出default。
    :- 句法
        如果var已定义,且为非空值,则直接返回var的值。
        否则直接返回default,且不会为var赋值。
        var=""
        echo ${var:-"default"}  # 输出 default 。
        echo $var  #  输出空。
    - 句法
        如果var已定义,则直接返回var的值。
        否则直接返回default,且不会为var赋值。
        var=""
        echo ${var-"default"}  # 输出空。
        echo $var  # 输出空。
        unset var
        echo ${var-"default"}  # 输出default 。
        echo $var  # 输出空。
    :? 句法
        如果var已定义,且为非空值,则直接返回var的值。
        否则脚本退出并返回行号和判断公式。  # 原文说会打印default,但是实际测试,会打印“var: default”。
        var=""
        echo ${var:?default}  # 显示格式  脚本名 行号 判断语句。例:test.sh: line 3: var: default
    ? 句法
        如果var已定义,则直接返回var的值。
        否则脚本退出并返回行号和判断公式。
        var=""
        echo ${var?default}  # 输出空。
        unset var
        echo ${var?default}  # 脚本退出,打印行号。
    :+ 句法
        当var未定义,或var为空值时,直接返回var的值。
        否则返回default,且不会为var赋值。
        var="var"
        echo ${var:+"default"}  # 输出default。
        var=""
        echo ${var:+"default"}  # 输出空。
    + 句法
        当var未定义时,直接返回var的值。
        否则返回default,且不会为var赋值。
        var="var"
        echo ${var+"default"}  # 输出var。
        unset var
        echo ${var+"default"}  # 输出default。

上述句法的区别和用法小结。
    : 句法,主要用于判断变量是否为空变量,如果变量为非空,则返回变量的值。
    = 和 - 句法,两者的返回值一致,区别在于 = 会为变量赋值,而 - 不会。
    - 和 + 句法,两者判断互为反转,- 返回值和 + 返回值互相颠倒。

    = 句法,可以用来做变量赋值操作。
    + - 句法,可以在脚本中组合,来做变量的判定和定义工作。
    ? 句法,可以用来做变量的判断,并且可以输出错误信息。

猜你喜欢

转载自blog.csdn.net/anyuzun/article/details/85063154