扩展变量是指在shell脚本中用于实现条件判断和变量操作的特殊语法。
扩展变量总结
前三个 存在或者非空时,优先使用待测变量,否则使用默认值(或报错)。
最后一个 存在或者非空时,优先使用默认值,否则返回空值(不存在或者空 统一返回空)。
条件格式 | 目的 | 判断条件 | 符合的动作 | 不符合的动作 | |
---|---|---|---|---|---|
1 | ${待测变量:-默认值} | 返回一个非空值 | 测试不存在或者为空 | 返回“默认值” | 返回变量值 |
2 | ${待测变量:=默认值} | 给空值变量赋值 | 测试不存在或者为空 | 为变量赋值 | 返回变量值 |
3 | ${待测变量:?默认值} | 检查条件是否完备 | 测试不存在或者为空 | 提示错误信息 | 返回变量值 |
4 | ${待测变量:+默认值} | 判断某事是否为真 | 测试存在或者非空 | 返回“默认值” | 返回空值 |
扩展变量实例
变量为空 例如a=""
变量不存在 例如a没有定义或者定义后unset a
${待测变量:-默认值}
待测变量定义为非空,返回待测变量;待测变量定义为空或未定义,返回默认值。
renhl252@verygood:~$ a="456";echo ${a:-"123"} #a定义非空
456
renhl252@verygood:~$ unset a
renhl252@verygood:~$ echo ${a:-"123"} #a未定义
123
renhl252@verygood:~$ a="456";unset a;echo ${a:-"123"} #a定义后unset
123
renhl252@verygood:~$ a="";echo ${a:-"123"} #a定义为空
123
${待测变量:=默认值}
待测变量定义为非空,返回待测变量;待测变量定义为空或未定义,返回默认值同时将默认值赋值给待测变量。
renhl252@verygood:~$ a="456";echo ${a:="123"} #a定义非空
456
renhl252@verygood:~$ unset a;a="";echo ${a:="123"} #a定义为空
123
renhl252@verygood:~$ echo ${a}
123
renhl252@verygood:~$ unset a;echo ${a:="123"} #a未定义
123
renhl252@verygood:~$ echo ${a}
123
${待测变量:?默认值}
待测变量定义为非空,返回待测变量;待测变量定义为空或未定义,返回错误信息。
renhl252@verygood:~$ a="456";echo ${a:?"123"} #a定义非空
456
renhl252@verygood:~$ unset a; a="";echo ${a:?"123"} #a定义为空
-bash: a: 123
renhl252@verygood:~$ unset a; echo ${a:?"123"} #a未定义
-bash: a: 123
renhl252@verygood:~$
${待测变量:+默认值}
待测变量定义为非空,返回默认值;待测变量定义为空或未定义,返回空。
renhl252@verygood:~$ a="456";echo ${a:+"123"} #a定义非空
123
renhl252@verygood:~$ unset a; a="";echo ${a:+"123"} #a定义为空
renhl252@verygood:~$ unset a; echo ${a:+"123"} #a未定义
renhl252@verygood:~$