我有4个for循环
for list in 11 12 1 ; do
if [[ $list =~ "$MONTH" ]] ; then
QUARTER=Q1
fi
done
for list in 2 3 4 ; do
if [[ $list =~ "$MONTH" ]] ; then
QUARTER=Q2
fi
done
for list in 5 6 7 ; do
if [[ $list =~ "$MONTH" ]] ; then
QUARTER=Q3
fi
done
for list in 8 9 10 ; do
if [[ $list =~ "$MONTH" ]] ; then
QUARTER=Q4
fi
done
检查列表中是否存在当前月份并指定正确的QUARTER。
你有更短或更优雅的成就吗?
答案 0 :(得分:1)
我建议使用从月份编号映射到季度名称的数组:
quarters=(- Q1 Q2 Q2 Q2 Q3 Q3 Q3 Q4 Q4 Q4 Q1 Q1)
QUARTER="${quarters[MONTH]}"
(仅当$MONTH
是1到12之间的非零填充整数时才有效;但是如果情况并非如此,那么您现有的代码已经表现得相当奇怪了,所以我是假设没问题?)
答案 1 :(得分:1)
使用算术扩展。
QUARTER=Q$(( (MONTH + 13) % 12 / 3 + 1))
添加13并从12&#34中取出余数;旋转"几个月进入正确的3组。
将每个连续3组的3个疙瘩分成同一个季度。
在季度中加1会补偿从1开始编号的月份,而不是0。