if [ -n "${BASH-}" -o -n "${ZSH_VERSION-}" ] ; then
hash -r 2>/dev/null
fi
我在哪里可以找到这方面的参考资料?谢谢。
a 内的变量${...}
称为“参数扩展”。
搜索该词在在线手册中 https://man.cx/bash#heading14,或实际手册(第 792 行)。
The ${var-}
形式类似于${var:-}
。差异仅在之前的一行进行了解释:-
扩展(第 810 行):
... bash 测试未设置或为 null 的参数。省略冒号
结果仅针对未设置的参数进行测试。
因此,这种形式仅在变量未设置时进行测试(andnot null),并替换整个扩展${...}
为之后的值-
,在本例中是null.
因此,${var-}
变成:
- 当 var 有值(且不为空)时 var 的值。
- 当 var 为 null 时,还有 var 的值(缺少冒号 :!):
''
,因此:也为空。
- - 之后的值(在本例中为 null
''
) 如果 var 未设置。
所有这一切都是真的:
- 扩展到
''
当 var 未设置或为 null 时。
- 扩展为 var 的值(当 var 有值时)。
因此,扩展不会改变 var 的值,也不会改变它的扩展,只是避免了 shell 有选项时可能出现的错误nounset
set.
此代码将停止使用$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"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)