【发布时间】:2017-11-07 21:52:00
【问题描述】:
有没有办法编写一个比编写冗长的 if-else 语句更优雅的代码来考虑多种可能的组合?
我有如下随机生成的数据集,但有些行有时可能为空。
{
学期 1 年级 1 final_grade1
学期 1a 等级 1a 期末_等级 1a
}{
学期 2 年级 2 final_grade2
学期2a 等级2a final_grade2a
}
我已经为我的数据的所有可能的逻辑组合编写了代码:
if [[ -n $semester1 && -z $semester1a && -z $semester2 && -z $semester2a ]]; then
echo "Section 1:$semester1=$grade1, final grade for $semester1=$final_grade1 ."
elif [[ -n $semester1 && -n $semester1a && -z $semester2 && -z $semester2a ]]; then
echo "Section 1:$semester1=$grade1, $semester1a=$grade1a, final grade for $semester1=$final_grade1, final grade for $semester1a=$final_grade1a."
elif [[ -n $semester1 && -n $semester1a && -n $semester2 && -z $semester2a ]]; then
echo "Section 1:$semester1=$grade1, $semester1a=$grade1a, final grade for $semester1=$final_grade1, final grade for $semester1a=$final_grade1a."
echo "Section 2:$semester2=$grade2, final grade for $semester2=$final_grade2 ."
elif [[ -n $semester2 && -z $semester2a && -z $semester1 && -z $semester1a ]]; then
echo "Section 2:$semester2=$grade2, final grade for $semester2=$final_grade2 ."
elif [[ -n $semester2 && -n $semester2a && -z $semester1 && -z $semester1a ]]; then
echo "Section 2:$semester2=$grade2, $semester2a=$grade2a, final grade for $semester2=$final_grade2, final grade for $semester2a=$final_grade2a, ."
elif [[ -n $semester2 && -n $semester2a && -n $semester1 && -z $semester1a ]]; then
echo "Section 1:$semester1=$grade1, final grade for $semester1=$final_grade1 ."
echo "Section 2:$semester2=$grade2, $semester2a=$grade2a, final grade for $semester2=$final_grade2, final grade for $semester2a=$final_grade2a, ."
elif [[ -n $semester2 && -n $semester2a && -n $semester1 && -n $semester1a ]]; then
echo "Section 1:$semester1=$grade1, $semester1a=$grade1a, final grade for $semester1=$final_grade1, final grade for $semester1a=$final_grade1a, ."
echo "Section 2:$semester2=$grade2, $semester2a=$grade2a, final grade for $semester2=$final_grade2, final grade for $semester2a=$final_grade2a, ."
fi
有没有更好的检查方法?
【问题讨论】:
-
什么定义更好?任何代码行数较少的代码都可能更难让其他人维护。至少,在这里,意图是什么是可辨认的。 (
bash精英的成员将很高兴地证明这是错误的;-)。祝你好运。 -
在不提出具体技术问题的情况下寻求改进工作代码的方法的问题通常更欢迎Code Review。
-
我喜欢这个问题。真值表(本质上就是这样)很可爱,但似乎很少有脚本语言支持它们作为数据结构。对我来说,这感觉就像错过了计算机科学领域的机会。
标签: bash shell unix if-statement scripting