【发布时间】:2021-10-30 04:26:48
【问题描述】:
我可以在 python venv activate bash 脚本中看到以下代码。 (以下代码针对我的问题稍作修改)
if [ -n "${_OLD_VIRTUAL_PATH:-}" ] ; then
# do something
fi
# .......
# .......
if [ -z "${PYTHONHOME:-}" ] ; then
# do something
fi
使用表达式"${_OLD_VIRTUAL_PATH:-}" 代替"$_OLD_VIRTUAL_PATH" 有什么好处?似乎两者都产生相同的结果。有什么原因吗?
【问题讨论】:
-
this 是脚本吗?我只是想了解一些上下文。我没有看到
-z "${PYTHONHOME:-}",但我确实看到了一些类似的东西,例如-z "${VIRTUAL_ENV_DISABLE_PROMPT:-}" -
@Andy This answer 涵盖了您为什么要使用它,但我仍然不明白为什么冒号在那里。如果变量为空,为什么用空字符串替换它? null 和空字符串之间有区别吗,可能是整数变量? (
declare -i var) -
@AndyRay :没有。你提到的问题是关于
:-的一般用法和shell 参数扩展。我的问题是使用${foo:-}而不是$foo是否会改变脚本结果。 -
@wjandrea 是的。我为我的问题稍微修改了脚本。
-
如果使用
set -u,如果未设置变量,您将收到仅$var的错误。这就是他们使用${var:-}的原因。请注意,该脚本旨在获取源代码,因此他们无法控制用户如何配置其终端(set -u可能会或可能不会使用)。
标签: bash shell script parameter-expansion