shell高级技巧-变量替换运算符

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;
    [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万+

猜你喜欢

转载自blog.csdn.net/xie_qi_chao/article/details/105039161
今日推荐