变量名后的'-'(破折号)在这里做什么?
if [ -n "${BASH-}" -o -n "${ZSH_VERSION-}" ] ; then hash -r 2>/dev/null
fi
在哪里可以找到参考?谢谢。
回答:
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 -u
unset var
echo "variable $var"
[[ $var ]] && echo "var set"
但是,此代码将正确运行:
#!/bin/bashset -u
unset var
echo "variable ${var-}"
[[ ${var-} ]] && echo "var set"
以上是 变量名后的'-'(破折号)在这里做什么? 的全部内容, 来源链接: utcz.com/qa/398810.html