变量替换运算符

bash中提供了一组可以同时检验和修改变量的特定修改符。这些修改符提供了一个快捷的方法来检验变量是不是被设置过,并把输出结果输出到一个变量中,见下表:

修改符

描述

用途

${variable:-word}

如variable被设置且非空,则返回该值,否则返回word,变量值不变。

如变量未定义,返回默认值。

${variable-word}

如variable未被设置,则返回word,变量值不变,如果设置变量,则返回变量值,即使变量的值为空值。

如变量未设置,返回默认值。

${variable:=word}

如variable被设置且非空,则返回该值,否则设置变量为word,同时返回word。

如果变量未定义,则设置其为默认值。

${variable=word}

如variable未设置,则设置变量为word,同时返回word,如果variable被设置且为空,将返回空值,同时variable不变。否则返回variable值,同时variable不变。

如果变量未设置,则设置其为默认值。

${variable:+word}

如variable被设置且非空,则返回word,否则返回null,变量值不变。

用于测试变量是否存在。

${variable+word}

如variable被设置(即使是空值),则返回word,否则返回空。

用于测试变量是否设置。

${variable:?word}

如variable被设置且非空,则返回该值,否则显示word,然后退出Shell。如果word为空,打印"parameter null or not set"

为了捕捉由于变量未定义所导致的错误。

${variable:offset}

从variable的offset位置开始取,直到末尾。

 

${variable:offset:length}

从variable的offset位置开始取length个字符。

 


   

  #${variable:-word}的示例,其C语言表示形式为:
    #    if (NULL == variable)
    #        return word;
    #    else
    #        return $variable;
    /> unset var_name                        #将变量var_name置为空。
    /> var_name=
    /> echo ${var_name:-NewValue}    #var_name为空,因此返回NewValue
    NewValue
    /> echo $var_name                        #var_name的值未变化,仍然为空。

    /> var_name=OldValue                   #给var_name赋值。
    /> echo ${var_name:-NewValue}    #var_name非空,因此返回var_name的原有值。
    OldValue
    /> echo $var_name                        #var_name的值未变化,仍然OldValue。
    OldValue

    #${variable-word}的示例,其伪码表示形式为:
    #    if (variable is NOT set)
    #        return word;
    #    else
    #        return $variable;
    /> unset var_name                         #取消该变量var_name的设置。
    /> echo ${var_name-NewValue}    #var_name为空,因此返回NewValue
    NewValue
    /> echo $var_name                        #var_name的值未变化,仍然为空。

    /> var_name=OldValue                   #给var_name赋值,即便执行var_name=,其结果也是一样。
    /> echo ${var_name-NewValue}    #var_name非空,因此返回var_name的原有值。
    OldValue
    /> echo $var_name                        #var_name的值未变化,仍然OldValue。
    OldValue

    
    #${variable:=word}的示例,其C语言表示形式为:
    #    if (NULL == variable) {
    #        variable=world;
    #        return word;
    #    } else {
    #        return $variable;
    #    }
    /> unset var_name                        #将变量var_name置为空。
    /> var_name=
    /> echo ${var_name:=NewValue}   #var_name为空,设置变量为NewValue同时返回NewValue。
    NewValue
    /> echo $var_name                        #var_name的值已经被设置为NewValue。
    NewValue
    /> var_name=OldValue                  #给var_name赋值。
    /> echo ${var_name:=NewValue}   #var_name非空,因此返回var_name的原有值。
    OldValue
    /> echo $var_name                       #var_name的值未变化,仍然OldValue。
    OldValue
    
    #${variable=word}的示例,其伪码表示形式为:
    #    if (variable is NOT set) {
    #        variable=world;
    #        return word;
    #    } else if (variable == NULL) {
    #        return $variable;  //variable is NULL
    #    } else {
    #        return $variable;
    #    }
    /> unset var_name                        #取消该变量var_name的设置。
    /> echo ${var_name=NewValue}  #var_name未被设置,设置变量为NewValue同时返回NewValue。
    NewValue
    /> echo $var_name                        #var_name的值已经被设置为NewValue。
    NewValue
    /> var_name=                              #设置变量var_name,并给该变量赋空值。
    /> echo ${var_name=NewValue}  #var_name被设置,且为空值,返回var_name的原有空值。
    
    /> echo $var_name                       #var_name的值未变化,仍未空值。
    
    /> var_name=OldValue                  #给var_name赋值。
    /> echo ${var_name=NewValue}  #var_name非空,因此返回var_name的原有值。
    OldValue
    /> echo $var_name                       #var_name的值未变化,仍然OldValue。
    OldValue

    #${variable:+word}的示例:
    #    if (NULL != variable)
    #        return word;
    #    else
    #        return $variable;
    /> var_name=OldValue                  #设置变量var_name,其值为非空。
    /> echo ${var_name:+NewValue}   #由于var_name有值,因此返回NewValue
    NewValue
    /> echo $var_name                       #var_name的值仍然为远之OldValue
    OldValue
    /> unset var_name                        #将var_name置为空值。
    /> var_name=
    /> echo ${var_name:+NewValue}   #由于var_name为空,因此返回null。
    /> echo $var_name                       #var_name仍然保持原有的空值。

    #${variable+word}的示例,其伪码表示形式为:
    #    if (variable is set)
    #        return word;
    #    else
    #        return $variable;
    /> var_name=OldValue                  #设置变量var_name,其值为非空。
    /> echo ${var_name+NewValue}   #由于var_name有值,因此返回NewValue
    NewValue
    /> echo $var_name                       #var_name的值仍然为远之OldValue
    OldValue
    /> unset var_name                        #取消对变量var_name的设置。
    /> echo ${var_name+NewValue}   #返回空值。
    /> echo $var_name                       #var_name仍未被设置。

    #${variable:?word}的示例:
    #    if (NULL != variable) {
    #        return variable;
    #    } else {
    #        if (NULL != word)
    #            return "variable : word";
    #        else
    #            return "parameter null or not set";
    #    }
    /> var_name=OldValue                  #设置变量var_name,其值为非空。
    /> echo ${var_name:?NewValue}   #由于var_name有值,因此返回变量的原有值
    OldValue
    /> unset var_name                        #将var_name置为空值。
    /> var_name=
    /> echo ${var_name:?NewValue}   #由于var_name为空,因此返回word。
    -bash: var_name: NewValue
    /> echo $var_name                       #var_name仍然保持原有的空值。

    /> echo ${var_name:?}                #如果word为空,返回下面的输出。
    -bash: var_name: parameter null or not set

    #${variable:offset}示例:
    /> var_name=notebook
    /> echo ${var_name:2}
    tebook
    /> echo ${var_name:0}                #如果offset为0,则取var_name的全部值。
    notebook

    ${variable:offset:length}示例:
    /> var_name=notebook
    /> echo ${var_name:0:4}
    note
    /> echo ${var_name:4:4}
    book

  

posted @ 2019-03-13 13:38  山的那一边  阅读(277)  评论(0)    收藏  举报