这个 bash 片段有什么作用?

这个 bash 片段有什么作用?

我不太精通 bash,但我确实需要理解以下内容的含义以及解释是什么?

该代码不是我的,但我相信来源我对子句中的表达式特别感到困扰if,两次有什么好处DISABLE_CUSTOM_CREDS

  if [[ -z "${ENABLE_CREDS}" && "${DISABLE_CUSTOM_CREDS}" && "${DISABLE_CUSTOM_CREDS}" -eq 0 ]]; then
    ENABLE_CREDS=1
  elif [[ -z "${ENABLE_CREDS}" && "${DISABLE_CUSTOM_CREDS}" -eq 1 ]]; then
    ENABLE_CREDS=0
  fi
  export ENABLE_CREDS

提前致谢!

答案1

-语句if执行的测试涉及DISABLE_CUSTOM_CREDS两次测试 shell 变量。第一次使用变量时,它会测试变量的值是否非空。如果是,则测试非空值在数值上是否等于零。

另一种写法代码如下

if [[ -z "${ENABLE_CREDS}" && -n "${DISABLE_CUSTOM_CREDS}" && "${DISABLE_CUSTOM_CREDS}" -eq 0 ]]; then
    ENABLE_CREDS=1
elif [[ -z "${ENABLE_CREDS}" && "${DISABLE_CUSTOM_CREDS}" -eq 1 ]]; then
    ENABLE_CREDS=0
fi
export ENABLE_CREDS

请注意插入的-n测试运算符,它测试非空字符串。当您仅测试字符串时,此运算符是隐式的。

DISABLE_CUSTOM_CREDS目前尚不清楚是否需要对非空进行初始测试(我们看不到其余的代码)。如果变量有可能为空,则可能需要它,在这种情况下,零测试将是真的(程序员可能不希望它触发设置ENABLE_CREDS1

这意味着

  • ENABLE_CREDS设置为1ENABLE_CREDS需要未设置或为空字符串,DISABLE_CUSTOM_CREDS必须非空且数值等于零,
  • ENABLE_CREDS设置为0ENABLE_CREDS必须未设置或为空,并且DISABLE_CUSTOM_CREDS在数值上必须等于 1。

if在不了解此代码的更多上下文的情况下,我可能会大胆猜测整个语句的目的是设置ENABLE_CREDS01尚未设置为某个值,具体取决于变量的逻辑逆DISABLE_CUSTOM_CREDS

if [ -z "$ENABLE_CREDS" ]; then
    if [ "${DISABLE_CUSTOM_CREDS:-0}" = 1 ]; then
        ENABLE_CREDS=0
    else
        ENABLE_CREDS=1
   fi
fi

如果ENABLE_CREDS为空,则针对 进行测试DISABLE_CUSTOM_CREDS(或字符串0,如果变量未设置或为空)1,并根据该测试的结果设置ENABLE_CREDS0或。1

这里的区别在于这段代码总是ENABLE_CRED留下一些价值。它要么具有旧的非空值,要么保证具有值01

这与问题中的代码形成对比,如果DISABLE_CUSTOM_CREDS为空或者它是某个值2(或者实际上如果它是值不为 0 或 1 的某个其他变量的名称;算术),则可能会将变量的值保留为空评估很棘手,这就是我在上面的代码中选择字符串比较的部分原因)。

相关内容