a
${...}中的变量称为“参数扩展”。在在线手册或实际手册中搜索该术语(第792行)。 该形式是在形式上相似。仅在展开前一行(行810)说明了差异:
${var-}``${var:-}``:-… bash测试未设置或为null的参数。省略冒号只会对未设置的参数进行测试。
因此,这种形式是测试仅当变量被复位( 和 不为空),并且替换整个扩张
${...}为后的值-,在这种情况下是 空 。
因此,
${var-}变为:- 当var具有值(而不是null)时,var的值。
- 另外,当var为null:时,var的值(冒号:丢失!)
''
也因此为null。 ''
如果未设置var ,则-之后的值(在这种情况下为null )。
所有这些实际上就是:
- 展开为
''
var未设置或为null时。 - 扩展到var的值(当var具有值时)。
因此,扩展没有改变var的值,也没有扩展,只是在shell
nounset设置了选项的情况下避免了可能的错误。
此代码将在以下两种用途上均停止
$var:
#!/bin/bashset -uunset varecho "variable $var"[[ $var ]] && echo "var set"
但是,此代码将正确运行:
#!/bin/bashset -uunset varecho "variable ${var-}"[[ ${var-} ]] && echo "var set"


