シェル高度な技術 - 変数の代入演算子

セットで提供bashは同時に、変数の特定の修飾子を調べて、変更することができます。これらの修飾子は、テストに変数が上に配置されていない簡単な方法を提供し、次の表の変数に出力する結果:

修飾子 説明 使用
$ {変数:-word} 変数が設定され、空でない、値が返され、そうでない場合はワード、変数定数の値。 変数が定義されていないなど、デフォルト値に戻ります。
$ {可変ワード} 変数セット、変数値を変数値の値がnullであっても、返された場合、変数は、リターン・ワード、変数定数の値に設定されていません。 変数は、デフォルト値に戻ります設定されていません。
$ {変数:=ワード} 変数が設定され、空で、値が返され、それ以外の場合は、変数ワードに設定され、リターン・ワード。 変数が定義されていない場合は、デフォルト値に設定されています。
$ {変数=ワード} 変数は、その後、設定された変数の単語を設定し、リターン・ワード、および変数がNULLに設定されている場合、NULL値は同じ変数が、返されていません。それ以外の場合は、変数値、変数そのまましばらく。 変数が設定されていない場合は、デフォルト値に設定されています。
$ {変数:+ワード} 変数が設定され、空でない、リターン・ワードは、そうでない場合はnull、可変定数の値を返しています。 テストのために変数が存在します。
$ {変数+ワード} 変数が(でもヌル)、そしてそれ以外の場合は、言葉を返す空に設定されています。 テスト変数に使用が設定されています。
$ {変数:?単語} 変数が設定され、空でない、値が返され、そうでなければ表示された単語は、シェルを終了します。 言葉が空の場合、印刷「パラメータnullまたは設定されていない」未定義の変数のエラーをキャプチャに起因します。
$ {変数:オフセット} 最後まで可変のオフセット開始位置から撮影。
$ {変数:オフセット:長さ} 可変長文字のオフセット位置から取るために始めます。
    #${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