我正在努力做到聪明但却行不通。有人能帮我做一点这么简单吗?
if [[ "${DATUM}" == "${today}" && "${STUNDE}" == "${HH24}" ]] || [[ "${DATUM}" == "${today}" && "${STUNDE}" == "20" ]] ||
[[ "${DATUM}" == "${today}" && "${STUNDE}" == "" && "20" == "${HH24}" ]]; then
有没有办法将它结合起来?
答案 0 :(得分:1)
您的代码可以翻译为:
(C1 and C2) or (C1 and C3) or (C1 and C4 and C5)
应用布尔算术,您可以将其简化为:
C1 and (C2 or C3 or (C4 and C5))
这就是说,你可以添加一个嵌套的if语句,首先检查C1条件,然后检查其他条件。它并没有简化代码,但在这里它是:
if [ "${DATUM}" = "${today}" ]; then
if [ "${STUNDE}" = "${HH24}" ] || [ "${STUNDE}" = "20" ] || { [ "${STUNDE}" = "" ] && [ "${HH24}" = "20" ]; }; then
# Insert the code to execute when the conditions are satisfied
fi
fi
答案 1 :(得分:0)
正如其他人所说,使用law of distributivity of conjunction (⋀, *, AND) over disjunction (⋁, +, OR):
可以简化您的布尔表达式(a ⋀ b) ⋁ (a ⋀ c) = a ⋀ (b ⋁ c)
但为了进一步简化,请注意您可以在bash
中使用&&
和||
(bash
特定的)[[ .. ]]
命令:
[[ $a == 1 && $b == 2 ]]
此外,当使用[[ .. ]]
复合命令(超过POSIX [ .. ]
)时,您不必引用变量。要测试空字符串,您可以在-z $var
上使用较短的$var == ""
表单。
所有这些共同产生:
if [[ $DATUM == $today ]] && [[ $STUNDE == $HH24 || $STUNDE == 20 || -z $STUNDE && $HH24 == 20 ]]; then
# ...
fi
为了进一步简化它,我们需要有关于应用程序逻辑,可能值等的更多详细信息。