foo=${foo:-default}
bar=${bar-default}
包括冒号:
和排除它之间是否存在功能差异?
答案 0 :(得分:4)
请参阅the spec:
$ myvar=
$ echo "${myvar:-default}"
default
$ echo "${myvar-default}"
$ unset myvar
$ echo "${myvar-default}"
default
使用冒号,检查是"如果未设置或为null,则使用默认"。没有冒号,它只是"如果未设置,请使用默认"。
相关段落(强调我的):
顺便说一句,对于Bash来说也是如此。引自manual:在前面显示的参数扩展中,使用in 格式应导致测试未设置或参数 空强>;遗漏将导致参数的测试 仅取消设置。
当不执行子串扩展时,使用所描述的表单 在下面(例如,
:-
),Bash测试未设置或为null的参数。 省略冒号会导致仅对参数进行测试 未设置。换句话说,如果包含冒号,操作员将进行测试 对于参数的存在而言,它的值不是 空值;如果省略冒号,则运算符仅测试是否存在。