我想映射,例如,4到'Apr'(月份名称的3个字符缩写)
答案 0 :(得分:18)
试试这个:
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]}
答案 1 :(得分:14)
#! /bin/bash
case $1 in
[1-9]|1[0-2]) date -d "$1/01" +%b ;;
*) ; exit 1
esac
答案 2 :(得分:4)
可以像这样获得对语言环境敏感的结果;将数字放入日期的月份位置,作为日期输出到日期,并选择任意年份和日期(远离50年代和远期未来,并避免大于20的日期)。它不是实际年份:
i=10; date -d 2012/${i}/01 +%b
在这里,使用locale de_DE,我得到结果:
Okt
(我没有选择四月,因为它是当前月份的默认日期,所以对于格式错误的-d -date,你得到四月,即使我= 10。我知道,因为我此外:四月份的德语名称是四月份,所以它不能很好地作为现在的精细细节的例子:)
i=10; LC_ALL=C date -d 2012/${i}/01 +%b
这显示了国际标准风格的月份。
该解决方案的优势在于,它将在革命中存活下来,将月份重新命名为Brumaire,Obamer或国际化尝试(Mär,Mai,Okt,Dez in German,ie)。