我不太精通 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
Run Code Online (Sandbox Code Playgroud)
提前致谢!
-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
Run Code Online (Sandbox Code Playgroud)
请注意插入的-n测试运算符,它测试非空字符串。当您仅测试字符串时,此运算符是隐式的。
目前尚不清楚是否DISABLE_CUSTOM_CREDS需要对非空进行初始测试(我们看不到其余的代码)。如果变量有可能为空,则可能需要它,在这种情况下,零测试将为真(并且程序员可能不希望它触发设置ENABLE_CREDS为1)。
这意味着
ENABLE_CREDS设置为1,ENABLE_CREDS需要未设置或为空字符串,DISABLE_CUSTOM_CREDS必须非空且数值等于零,ENABLE_CREDS设置为0,ENABLE_CREDS必须未设置或为空,并且DISABLE_CUSTOM_CREDS在数值上必须等于 1。在不了解此代码的更多上下文的情况下,我可能会大胆猜测if整个语句的目的是设置ENABLE_CREDS为0或1尚未设置为某个值,具体取决于变量的逻辑逆DISABLE_CUSTOM_CREDS。
if [ -z "$ENABLE_CREDS" ]; then
if [ "${DISABLE_CUSTOM_CREDS:-0}" = 1 ]; then
ENABLE_CREDS=0
else
ENABLE_CREDS=1
fi
fi
Run Code Online (Sandbox Code Playgroud)
如果ENABLE_CREDS为空,则针对 进行测试DISABLE_CUSTOM_CREDS(或字符串0,如果变量未设置或为空)1,并根据该测试的结果设置ENABLE_CREDS为0或。1
这里的区别在于,这段代码总是留下ENABLE_CRED一些值。它要么具有旧的非空值,要么保证具有值0或1。
这与问题中的代码形成对比,如果DISABLE_CUSTOM_CREDS为空或者它是某个值2(或者实际上如果它是值不为 0 或 1 的某个其他变量的名称;算术),则可能会将变量的值保留为空评估很棘手,这就是我在上面的代码中选择字符串比较的部分原因)。
| 归档时间: |
|
| 查看次数: |
201 次 |
| 最近记录: |