जवाबों:
बैश में (> = 4.2) प्रिंटफ की अंतर्निहित तिथि फ़ॉर्मेटर (बैश का हिस्सा) को बाहरी date
(आमतौर पर जीएनयू तिथि) के बजाय उपयोग करना बेहतर होता है ।
जैसे की:
# put current date as yyyy-mm-dd in $date
# -1 -> explicit current date, bash >=4.3 defaults to current time if not provided
# -2 -> start time for shell
printf -v date '%(%Y-%m-%d)T\n' -1
# put current date as yyyy-mm-dd HH:MM:SS in $date
printf -v date '%(%Y-%m-%d %H:%M:%S)T\n' -1
# to print directly remove -v flag, as such:
printf '%(%Y-%m-%d)T\n' -1
# -> current date printed to terminal
बैश में (<4.2):
# put current date as yyyy-mm-dd in $date
date=$(date '+%Y-%m-%d')
# put current date as yyyy-mm-dd HH:MM:SS in $date
date=$(date '+%Y-%m-%d %H:%M:%S')
# print current date directly
echo $(date '+%Y-%m-%d')
अन्य उपलब्ध दिनांक स्वरूपों को दिनांक मैन पेज (बाहरी गैर-बैश विशिष्ट आदेश के लिए) से देखा जा सकता है :
man date
+%F %T
शॉर्टकट के रूप में उपयोग कर सकते हैं +%Y-%m-%d %H:%M:%S
। बस ध्यान दें कि कुछ फाइलसिस्टम (खांसी ** एचएफएस) :
एक में परिवर्तित हो जाएंगे /
, जिससे आपको एक स्ट्रिंग मिलेगी, 2016-09-15 11/05/00
जो शक्तिशाली भ्रमित है।
date=$(date)
है date=`date`
। इसके अलावा, अपने निजी चर के लिए अपरकेस का उपयोग न करें; अपरकेस चर नाम सिस्टम के लिए आरक्षित हैं।
प्रयत्न: $(date +%F)
आप ऐसा कुछ कर सकते हैं:
$ date +'%Y-%m-%d'
आप आईएसओ 8601 मानक तिथि प्रारूप की तलाश कर रहे हैं , इसलिए यदि आपके पास जीएनयू तिथि है (या 1988 से अधिक आधुनिक कोई आदेश है):$(date -I)
date -I
काम नहीं किया। काढ़ा (जो उपसर्ग 'जी' का उपयोग करता है) का उपयोग करके GNU कोरुटिल स्थापित करने के बाद काम किया। gdate -I
-I
GNU के लिए प्रलेखित विकल्प नहीं मिल रहा है date
, हालाँकि यकीन है कि यह इसके बराबर प्रतीत होता है date +%F
।
date -d '1 hour ago' '+%Y-%m-%d'
आउटपुट होगा 2015-06-14
।
%
।
$(date +%F_%H-%M-%S)
कोलन हटाने के लिए इस्तेमाल किया जा सकता है (:) बीच में
उत्पादन
2018-06-20_09-55-58
हाल के बैश (संस्करण) 4.2) के साथ, आप बिल्ट printf
इन फॉर्मेट संशोधक का उपयोग कर सकते हैं %(strftime_format)T
:
$ printf '%(%Y-%m-%d)T\n' -1 # Get YYYY-MM-DD (-1 stands for "current time")
2017-11-10
$ printf '%(%F)T\n' -1 # Synonym of the above
2017-11-10
$ printf -v date '%(%F)T' -1 # Capture as var $date
printf
बाहरी कमांड होने date
के बावजूद यह बैश बिलिन से बहुत तेज है date
।
के रूप में अच्छी तरह से, printf -v date ...
की तुलना date=$(printf ...)
में यह एक उपधारा फोर्किंग की आवश्यकता नहीं है की तुलना में तेजी है ।
date
यदि आप इसका उपयोग पहले से ही एक बैश स्क्रिप्ट के भीतर से कर रहे हैं, क्योंकि इसमें कोई अतिरिक्त लाइब्रेरी लोड नहीं करनी है। (* मैंने अपने लिनक्स सर्वर पर 1000 पुनरावृत्तियों पर एक ~ 160x की गति का अंतर मापा)
printf -v date
सब्सक्राइब न करूं। बहुत अच्छी जानकारी !!
#!/bin/bash -e
x='2018-01-18 10:00:00'
a=$(date -d "$x")
b=$(date -d "$a 10 min" "+%Y-%m-%d %H:%M:%S")
c=$(date -d "$b 10 min" "+%Y-%m-%d %H:%M:%S")
#date -d "$a 30 min" "+%Y-%m-%d %H:%M:%S"
echo Entered Date is $x
echo Second Date is $b
echo Third Date is $c
यहां x नमूना तिथि का उपयोग किया गया है और फिर उदाहरण डेटा के दोनों स्वरूपण को प्रदर्शित करता है और साथ ही दिनांक 10 मिनट अधिक वर्तमान तिथि प्राप्त कर रहा है।
मैं निम्नलिखित सूत्रीकरण का उपयोग करता हूं:
TODAY=`date -I`
echo $TODAY
इसके लिए मैन पेज चेकआउट करें date
, कई अन्य उपयोगी विकल्प हैं:
man date