2012-04-11 13 views

Respuesta

16

Prueba esto:

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

echo ${MONTHS[3]} 

O según la sugerencia de @ Potong (para tener una correspondencia entre el número 1-1 meses y el índice)

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

echo ${MONTHS[4]} 
+0

Escojo esta respuesta porque es más simple –

+6

Tal vez 'MONTHS = (dummy Jan Feb Mar Abr May Jun Jul Aug Sep Oct Nov Dic)' sería más intuitivo ya que entonces '4' se asigna a' Apr'. – potong

+0

@potong +1 De hecho ... ;-) –

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

¿Por qué el voto a favor? ¿Qué pasa con esta respuesta? –

+1

Estoy de acuerdo, no sé cuál es el problema con este enfoque. –

+1

Me pregunto también. –

4

a lo el resultado cale-sensitive se puede obtener así; coloque el número en la posición de mes de la fecha, pase como la fecha que se imprimirá hasta la fecha, y elija un año y día arbitrarios (manténgase alejado de los años 50 y el futuro lejano, y evite días mucho mayores que 20). No tiene que ser el año real:

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

Aquí, la localidad de_DE, me sale como resultado:

Okt 

(no elegir de abril, ya que es el valor predeterminado para la fecha para tomar el mes actual, así que con una fecha-fecha mal formateada, obtienes abril, incluso si i = 10. Lo sé, porque lo experimenté. Y además: el nombre alemán de abril es abril, entonces no lo haría t servir bien como ejemplo para los detalles más finos, que siguen ahora :)

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

esto revela el mes en un estilo estándar internacional.

La ventaja de la solución es que sobrevivirá a las revoluciones, que renombran los meses a Brumaire, Obamer o intentos de internacionalización (Mär, Mai, Okt, Dez en alemán, es decir).

Cuestiones relacionadas