10

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

4

3 回答 3

21

尝试这个 :

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

echo ${MONTHS[3]}

或根据@potong 的建议(在月份编号和索引之间建立 1-1 对应关系)

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

echo ${MONTHS[4]}
于 2012-04-11T01:14:38.560 回答
14
#! /bin/bash
case $1 in 
  [1-9]|1[0-2])     date -d "$1/01" +%b ;;
  *)            ;  exit 1
esac
于 2012-04-11T01:15:10.990 回答
6

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

i=10; date -d 2012/${i}/01 +%b

在这里,使用 locale de_DE,我得到结果:

Okt

(我没有选择四月,因为日期默认为当前月份,所以使用格式错误的 -d -date,即使 i=10,您也会得到四月。我知道,因为我经历过。此外:April 的德语名称是 April,所以它不能很好地作为更详细的示例,下面将要介绍:)

i=10; LC_ALL=C date -d 2012/${i}/01 +%b

这揭示了国际标准风格的月份。

该解决方案的优势在于,它将在革命中幸存下来,这些革命将月份重命名为 Brumaire、Obamer 或国际化尝试(德语中的 Mär、Mai、Okt、Dez,即)。

于 2012-04-11T17:28:09.063 回答