Bash:如何将数字转换为月份字符串?

Bash:如何将数字转换为月份字符串?,bash,Bash,例如,我想将4映射到'Apr'(月份名称的3个字符缩写)试试这个: MONTHS=(Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec) echo ${MONTHS[3]} 或根据@poton的建议(月数和指数之间有1-1对应关系) 这样可以获得对区域设置敏感的结果;将数字放在日期的月份位置,作为要输出到日期的日期传递,并选择任意年份和日期(远离50年代和遥远的未来,避免超过20天)。不一定是实际年份: i=10; date -d 2012/${i

例如,我想将4映射到'Apr'(月份名称的3个字符缩写)

试试这个:

MONTHS=(Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec)

echo ${MONTHS[3]}
或根据@poton的建议(月数和指数之间有1-1对应关系)


这样可以获得对区域设置敏感的结果;将数字放在日期的月份位置,作为要输出到日期的日期传递,并选择任意年份和日期(远离50年代和遥远的未来,避免超过20天)。不一定是实际年份:

i=10; date -d 2012/${i}/01 +%b
在这里,使用locale de_de,我得到的结果是:

Okt
(我没有选择April,因为它是当前月份的默认日期,所以如果格式不正确的-d-date,即使I=10,也会得到April。我知道这一点,因为我经历过。此外:April的德语名称是April,因此它不能作为更精细细节的示例,如下所示:)

这将以国际标准样式显示月份


该解决方案的优势在于,它将在革命中幸存下来,革命将月份重新命名为Brumaire、Obamer或internationalization attemps(德语中的Mär、Mai、Okt、Dez)

我选择这个答案是因为它很简单,因为
MONTHS=(虚拟的1-2-3-4-5-6-7-8-9-10-11-12)
会更直观,因为
4
映射到
Apr
i=10; date -d 2012/${i}/01 +%b
Okt
i=10; LC_ALL=C date -d 2012/${i}/01 +%b