shell advanced techniques - variable substitution operator

bash provided in a set may simultaneously examine and modify variables specific modifier. These modifiers provide a quick way to test variables are not disposed over, and to output the result to a variable in the following table:

Modifiers description use
${variable:-word} The variable is set and the non-empty, the value is returned, otherwise word, the value of the variable constant. Such as variable is not defined, return to the default value.
${variable-word} The variable is not set, returns word, the value of a variable constant, if the variable set, the variable value is returned, even if the value of the variable value is null. The variable is not set, returns to the default value.
${variable:=word} The variable is set and the non-empty, the value is returned, otherwise it is set to variable word, and returns word. If the variable is not defined, it is set to the default value.
${variable=word} The variable is not set, then set the variable word, and returns word, and if the variable is set to null, null values ​​are returned, while the same variable. Otherwise variable value, while variable unchanged. If the variable is not set, it is set to the default value.
${variable:+word} The variable is set and the non-empty, return word, otherwise return null, the value of the variable constant. For testing variable exists.
${variable+word} The variable is set (even null), then return word, otherwise empty. Used to test variable is set.
${variable:?word} The variable is set and the non-empty, the value is returned, otherwise displayed word, then exit Shell. If the word is empty, print "parameter null or not set" undefined variable error caused due to capture.
${variable:offset} Taken from a variable offset start position until the end.
${variable:offset:length} From the offset position of the variable length characters start to take.
    #${variable:-word}的示例,其C语言表示形式为:
    #    if (NULL == variable)
    #        return word;
    #    else
    #        return $variable;
    [root@xieqichao ~]# unset var_name                        #将变量var_name置为空。
    [root@xieqichao ~]# var_name=
    [root@xieqichao ~]# echo ${var_name:-NewValue}    #var_name为空,因此返回NewValue
    NewValue
    [root@xieqichao ~]# echo $var_name                        #var_name的值未变化,仍然为空。

    [root@xieqichao ~]# var_name=OldValue                   #给var_name赋值。
    [root@xieqichao ~]# echo ${var_name:-NewValue}    #var_name非空,因此返回var_name的原有值。
    OldValue
    [root@xieqichao ~]# echo $var_name                        #var_name的值未变化,仍然OldValue。
    OldValue

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

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

    
    #${variable:=word}的示例,其C语言表示形式为:
    #    if (NULL == variable) {
    #        variable=world;
    #        return word;
    #    } else {
    #        return $variable;
    #    }
    [root@xieqichao ~]# unset var_name                        #将变量var_name置为空。
    [root@xieqichao ~]# var_name=
    [root@xieqichao ~]# echo ${var_name:=NewValue}   #var_name为空,设置变量为NewValue同时返回NewValue。
    NewValue
    [root@xieqichao ~]# echo $var_name                        #var_name的值已经被设置为NewValue。
    NewValue
    [root@xieqichao ~]# var_name=OldValue                  #给var_name赋值。
    [root@xieqichao ~]# echo ${var_name:=NewValue}   #var_name非空,因此返回var_name的原有值。
    OldValue
    [root@xieqichao ~]# 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;
    #    }
    [root@xieqichao ~]# unset var_name                        #取消该变量var_name的设置。
    [root@xieqichao ~]# echo ${var_name=NewValue}  #var_name未被设置,设置变量为NewValue同时返回NewValue。
    NewValue
    [root@xieqichao ~]# echo $var_name                        #var_name的值已经被设置为NewValue。
    NewValue
    [root@xieqichao ~]# var_name=                              #设置变量var_name,并给该变量赋空值。
    [root@xieqichao ~]# echo ${var_name=NewValue}  #var_name被设置,且为空值,返回var_name的原有空值。
   
    [root@xieqichao ~]# echo $var_name                       #var_name的值未变化,仍未空值。
   
    [root@xieqichao ~]# var_name=OldValue                  #给var_name赋值。
    [root@xieqichao ~]# echo ${var_name=NewValue}  #var_name非空,因此返回var_name的原有值。
    OldValue
    [root@xieqichao ~]# echo $var_name                       #var_name的值未变化,仍然OldValue。
    OldValue

    #${variable:+word}的示例,其C语言表示形式为:
    #    if (NULL != variable)
    #        return word;
    #    else
    #        return $variable;
    [root@xieqichao ~]# var_name=OldValue                  #设置变量var_name,其值为非空。
    [root@xieqichao ~]# echo ${var_name:+NewValue}   #由于var_name有值,因此返回NewValue
    NewValue
    [root@xieqichao ~]# echo $var_name                       #var_name的值仍然为远之OldValue
    OldValue
    [root@xieqichao ~]# unset var_name                        #将var_name置为空值。
    [root@xieqichao ~]# var_name=
    [root@xieqichao ~]# echo ${var_name:+NewValue}   #由于var_name为空,因此返回null[root@xieqichao ~]# echo $var_name                       #var_name仍然保持原有的空值。

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

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

    [root@xieqichao ~]# echo ${var_name:?}                #如果word为空,返回下面的输出。
    -bash: var_name: parameter null or not set

    #${variable:offset}示例:
    [root@xieqichao ~]# var_name=notebook
    [root@xieqichao ~]# echo ${var_name:2}
    tebook
    [root@xieqichao ~]# echo ${var_name:0}                #如果offset为0,则取var_name的全部值。
    notebook

    ${variable:offset:length}示例:
    [root@xieqichao ~]# var_name=notebook
    [root@xieqichao ~]# echo ${var_name:0:4}
    note
    [root@xieqichao ~]# echo ${var_name:4:4}
    book
发布了350 篇原创文章 · 获赞 52 · 访问量 3万+

Guess you like

Origin blog.csdn.net/xie_qi_chao/article/details/105039161