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@