循环下一个序列并分配一个变量

时间:2016-10-18 18:16:58

标签: bash

我有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。

你有更短或更优雅的成就吗?

2 个答案:

答案 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))
  1. 添加13并从12&#34中取出余数;旋转"几个月进入正确的3组。

  2. 将每个连续3组的3个疙瘩分成同一个季度。

  3. 在季度中加1会补偿从1开始编号的月份,而不是0。