10

たとえば、4を「4月」(月の名前の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

ここで、ロケールde_DEを使用すると、結果として次のようになります。

Okt

(私は4月を選択しませんでした。これは、現在の月を取得する日付のデフォルトであるため、-d -dateの形式が正しくないと、i = 10であっても、4月になります。経験したのでわかります。さらに、4月のドイツ語の名前は4月であるため、これから続く詳細の例としては適切ではありません:)

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

これにより、月が国際標準スタイルで表示されます。

このソリューションの利点は、月の名前をBrumaire、Obamer、または国際化の試み(ドイツ語でMär、Mai、Okt、Dezなど)に変更する革命に耐えられることです。

于 2012-04-11T17:28:09.063 に答える