if [ -n "${BASH-}" -o -n "${ZSH_VERSION-}" ] ; then
hash -r 2>/dev/null
fi
我在哪里可以找到这方面的引用资料?谢谢。
最佳答案
${...}
中的变量称为“参数扩展”。
搜索该词 in the online manual ,或实际手册(第 792 行)。
${var-}
形式类似于 ${var:-}
。 :-
扩展(第 810 行)前一行解释了差异:
... bash tests for a parameter that is unset or null. Omitting the colon results in a test only for a parameter that is unset.
因此,此表单仅在未设置变量(和 不为空)时进行测试,并替换整个扩展 ${...}
之后的值-
,在本例中为 null。
因此,${var-}
变为:
- 当 var 有值(非空)时 var 的值。
- 当 var 为 null 时,还有 var 的值(缺少冒号 :!):
''
,因此:也为 null。 - 如果 var 未设置,- 之后的值(在本例中为 null
''
)。
一切都是真的:
- 当 var 未设置或为 null 时扩展为
''
。 - 扩展到 var 的值(当 var 有值时)。
因此,扩展不会改变 var 的值,也不会改变它的扩展,只是避免了 shell 设置了选项 nounset
时可能出现的错误。
此代码将在两次使用 $var
时停止:
#!/bin/bash
set -u
unset var
echo "variable $var"
[[ $var ]] && echo "var set"
但是这段代码将无错误地运行:
#!/bin/bash
set -u
unset var
echo "variable ${var-}"
[[ ${var-} ]] && echo "var set"
关于linux - 变量名后的 '-'(破折号)在这里做什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32674713/