2012-04-11 9 views

उत्तर

16

इस प्रयास करें:

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]} 
+0

मैं यह उत्तर चुनता हूं क्योंकि यह आसान है –

+6

शायद 'महीनों = (डमी जनवरी फरवरी मार्च अप्रैल मई जून जुलाई अगस्त सितंबर अक्टूबर नवंबर दिसंबर) '' 4' के नक्शे के रूप में अधिक अंतर्ज्ञानी होगा' अप्रैल '। – potong

+0

@ पॉटोंग +1 वास्तव में ... ;-) –

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

डाउनवोट क्यों? इस जवाब में क्या गलत है? –

+1

मैं सहमत हूं, मुझे नहीं पता कि इस दृष्टिकोण के साथ क्या गलत है। –

+1

मुझे आश्चर्य है। –

4

एक लो काले संवेदनशील परिणाम इस तरह प्राप्त किया जा सकता है; तिथि को महीने की स्थिति में रखें, तिथि तक आउटपुट होने के लिए तिथि के रूप में पारित किया गया है, और मनमाने ढंग से वर्ष और दिन चुनें (50 और दूर के भविष्य से दूर रहें, और 20 से अधिक दिन से बचें)। यह वास्तविक वर्ष होने के लिए नहीं किया गया है:

Okt 

(मैं अप्रैल में नहीं चुना था, पुराना होने के कारण के लिए डिफ़ॉल्ट है:

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

यहाँ, स्थान de_DE के साथ, मैं परिणाम के रूप में मिलता है वर्तमान महीने को लेने के लिए, इसलिए खराब स्वरूपित-डी -डेट के साथ, आप अप्रैल प्राप्त करते हैं, भले ही मैं = 10। मुझे पता है, क्योंकि मैंने इसका अनुभव किया है। और इसके अलावा: अप्रैल का जर्मन नाम अप्रैल है, इसलिए यह ' टी बेहतर विवरण के लिए उदाहरण के रूप में अच्छी तरह से सेवा करता है, जो अभी अभी का पालन करता है :)

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

यह इस महीने को एक अंतरराष्ट्रीय मानक शैली में बताता है।

समाधान का लाभ यह है कि यह क्रांति से बच जाएगा, जो ब्रुमायर, ओबामर या अंतर्राष्ट्रीयकरण प्रयासों (मार्स, माई, ओकेटी, जर्मन में डीज़) के महीनों का नाम बदलता है।

संबंधित मुद्दे

 संबंधित मुद्दे