默认字符串中的POSIX语法差异(冒号)?

时间:2016-05-05 22:28:30

标签: posix sh

foo=${foo:-default}

bar=${bar-default}

包括冒号:和排除它之间是否存在功能差异?

1 个答案:

答案 0 :(得分:4)

请参阅the spec

$ myvar=
$ echo "${myvar:-default}"
default
$ echo "${myvar-default}"

$ unset myvar
$ echo "${myvar-default}"
default

使用冒号,检查是"如果未设置或为null,则使用默认"。没有冒号,它只是"如果未设置,请使用默认"。

相关段落(强调我的):

  

在前面显示的参数扩展中,使用in   格式应导致测试未设置或参数   空;遗漏将导致参数的测试   仅取消设置

顺便说一句,对于Bash来说也是如此。引自manual

  

当不执行子串扩展时,使用所描述的表单   在下面(例如,:-),Bash测试未设置或为null的参数。   省略冒号会导致仅对参数进行测试   未设置。换句话说,如果包含冒号,操作员将进行测试   对于参数的存在而言,它的值不是   空值;如果省略冒号,则运算符仅测试是否存在。