1. 程式人生 > >shell指令碼專家指南筆記#6_測試變數和設定預設值

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。

上述句法的區別和用法小結。
    : 句法,主要用於判斷變數是否為空變數,如果變數為非空,則返回變數的值。
    = 和 - 句法,兩者的返回值一致,區別在於 = 會為變數賦值,而 - 不會。
    - 和 + 句法,兩者判斷互為反轉,- 返回值和 + 返回值互相顛倒。

    = 句法,可以用來做變數賦值操作。
    + - 句法,可以在指令碼中組合,來做變數的判定和定義工作。
    ? 句法,可以用來做變數的判斷,並且可以輸出錯誤資訊。