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;
# } 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