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

Ant*_*ong 8 bash

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

Dr.*_*eon 18

试试这个 :

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

echo ${MONTHS[3]}
Run Code Online (Sandbox Code Playgroud)

或者按照@ potong的建议(月份号和索引之间有1-1对应关系)

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

echo ${MONTHS[4]}
Run Code Online (Sandbox Code Playgroud)

  • 也许`MONTHS =(假1月2月3月4月5月6月7月8月9月10月11月12月)`将更直观,因为`4`映射到'Apr`. (7认同)

Ami*_*ani 14

#! /bin/bash
case $1 in 
  [1-9]|1[0-2])     date -d "$1/01" +%b ;;
  *)            ;  exit 1
esac
Run Code Online (Sandbox Code Playgroud)


use*_*own 5

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

i=10; date -d 2012/${i}/01 +%b
Run Code Online (Sandbox Code Playgroud)

在这里,使用语言环境 de_DE,我得到如下结果:

Okt
Run Code Online (Sandbox Code Playgroud)

(我没有选择April,因为date默认取当前月份,所以格式不好的-d -date,你得到April,即使i=10。我知道,因为我经历过。此外:April 的德语名称是 April,所以它不能很好地作为更详细的例子的例子,现在紧随其后:)

i=10; LC_ALL=C date -d 2012/${i}/01 +%b
Run Code Online (Sandbox Code Playgroud)

这以国际标准风格显示月份。

该解决方案的优点是,它将在革命中幸存下来,革命将月份重命名为雾月、奥巴默或国际化尝试(德语中的 Mär、Mai、Okt、Dez,即)。