首页 > 解决方案 > 有人可以帮我处理这些 shell 脚本行吗?我无法理解这些行中的 DEBUG 有什么用

问题描述

# Define DEBUG=true on cmdline, if needed

DEBUG=${DEBUG:-false}
[[ ${DEBUG} = true ]] || DEBUG="false"

标签: linuxbash

解决方案


解释

如果 的内容为空,则第一个赋值将变量设置DEBUG为。请注意,如果还没有初始化,它也被认为是空的,因此将接收该值。falseDEBUGDEBUGfalse

第二行使用 OR 运算符 using ||,它与以下内容完全相同:

if ! [[ ${DEBUG} = true ]]
then
  DEBUG="false"
fi

换句话说,false当且仅DEBUG不等于时,它将值分配给您的变量true

最后,这段代码的目的是将变量定义DEBUG为非布尔值,如果变量true不包含布尔值false,则使用默认值。false

改进

我认为第一个赋值是没有意义的,因为如果变量在这段代码的开头是空的,那么最后一行将把变量赋值给false反正。

此外,${DEBUG}应该用引号保护 ,例如[[ "${DEBUG}" = true ]][[ ${DEBUG} = true ]]如果变量包含空格,您的脚本可能无法正常工作。

可能有点矫枉过正,但我​​鼓励检查区分大小写并使用后备代码。

假设用户DEBUG=TRUE在调用您的脚本之前定义(大写), 的值DEBUG将被强制为false. 我猜用户不会很高兴。

以下代码解决了所有这些问题:

# Define DEBUG=true on cmdline, if needed

DEBUG=${DEBUG,,} # Force the variable to lowercase
[[ "${DEBUG}" = true ]] || DEBUG=false

推荐阅读