উত্তর:
ব্যাশ (> = 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
। শুধু মনে রাখবেন যে কিছু ফাইল সিস্টেম (কাশি ** HFS) রূপান্তর করবে :
একটি থেকে /
, আপনি একটি স্ট্রিং মত দান 2016-09-15 11/05/00
যা বিভ্রান্তিকর শক্তিমান।
date=$(date)
পরিবর্তে date=`date`
। এছাড়াও, আপনার ব্যক্তিগত ভেরিয়েবলগুলির জন্য বড় হাতের ব্যবহার করবেন না; বড় হাতের অক্ষরগুলি সিস্টেমের জন্য সংরক্ষিত।
চেষ্টা করুন: $(date +%F)
আপনি এর মতো কিছু করতে পারেন:
$ date +'%Y-%m-%d'
আপনি আইএসও 8601 মানক তারিখের ফর্ম্যাটটি সন্ধান করছেন, সুতরাং আপনার যদি জিএনইউ তারিখ থাকে (বা 1988 এর চেয়ে আধুনিক কোনও তারিখের কমান্ড) কেবল করুন:$(date -I)
date -I
কাজ হয়নি। ব্রিউ (যা উপসর্গ 'g' ব্যবহার করে) ব্যবহার করে জিএনইউ কোর্টিলগুলি ইনস্টল করে কাজ করেছে। gdate -I
-I
জিএনইউর জন্য নথিভুক্ত বিকল্পটি আমি খুঁজে পাচ্ছি না 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
একটি বাহ্যিক কমান্ডের তুলনায় বাশ বিল্টিনের চেয়ে অনেক দ্রুত is
পাশাপাশি, printf -v date ...
এটি date=$(printf ...)
যেহেতু সাবসেলের কাঁটাচামচ করার দরকার নেই তার চেয়ে দ্রুত ।
date
আপনি যদি ইতিমধ্যে কোনও ব্যাশ স্ক্রিপ্টের মধ্যে থেকে এটি ব্যবহার করছেন তবে এই কমান্ডটি অবিশ্বাস্যভাবে দ্রুত * কারণ এটি কোনও অতিরিক্ত লাইব্রেরি লোড করতে হয় না। (* আমি আমার লিনাক্স সার্ভারে 1000 পুনরাবৃত্তির চেয়ে 160 ডলার গতির পার্থক্য পরিমাপ করেছি)
printf -v date
সাব-শেল না দেওয়ার বিষয়ে মন্তব্য করার জন্য +5 করতে পারি । খুব ভাল তথ্য !!
#!/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
এখানে এক্স ব্যবহৃত নমুনা তারিখ এবং তারপরে উদাহরণ উভয় ডেটা ফর্ম্যাটিংয়ের পাশাপাশি বর্তমান তারিখের 10 মিনিট আরও বেশি তারিখ প্রাপ্ত করে।
আমি নিম্নলিখিত সূত্র ব্যবহার:
TODAY=`date -I`
echo $TODAY
ম্যান পেজটির জন্য চেকআউট করুন date
, এখানে আরও অনেক দরকারী বিকল্প রয়েছে:
man date