ฉันพยายามใช้$(date)
ใน bash shell script ของฉัน แต่ฉันต้องการYYYY-MM-DD
รูปแบบวันที่
ฉันจะได้รับสิ่งนี้ได้อย่างไร
ฉันพยายามใช้$(date)
ใน bash shell script ของฉัน แต่ฉันต้องการYYYY-MM-DD
รูปแบบวันที่
ฉันจะได้รับสิ่งนี้ได้อย่างไร
คำตอบ:
ใน bash (> = 4.2) ควรใช้ตัวจัดรูปแบบวันที่ในตัวของ printf (ส่วนหนึ่งของ bash) แทนที่จะใช้ตัวภายนอกdate
(โดยปกติคือวันที่ของ GNU)
เช่นนี้:
# 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) บางตัวจะแปลง:
เป็น a /
ทำให้คุณมีสตริง2016-09-15 11/05/00
ที่ทำให้คุณสับสน
date=$(date)
date=`date`
นอกจากนี้อย่าใช้ตัวพิมพ์ใหญ่สำหรับตัวแปรส่วนตัวของคุณ ชื่อตัวแปรตัวพิมพ์ใหญ่ถูกสงวนไว้สำหรับระบบ
ลอง: $(date +%F)
คุณสามารถทำสิ่งนี้:
$ date +'%Y-%m-%d'
คุณกำลังมองหารูปแบบวันที่มาตรฐานISO 8601ดังนั้นหากคุณมีวันที่ GNU (หรือคำสั่งวันที่ใด ๆ ที่ทันสมัยกว่า 1988) เพียงทำ:$(date -I)
date -I
ไม่ทำงาน มีการติดตั้งGNU coreutilsโดยใช้การชง (ซึ่งใช้คำนำหน้า 'g') 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
ด้วย Bash ล่าสุด (เวอร์ชั่น≥ 4.2) คุณสามารถใช้ builtin 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
เนื่องจากเป็น Bash ในตัวขณะที่date
เป็นคำสั่งภายนอก
และprintf -v date ...
เร็วกว่าdate=$(printf ...)
เนื่องจากไม่ต้องใช้การฟอร์ดย่อย
date
ถ้าคุณกำลังใช้สิ่งนี้จากสคริปต์ทุบตีอยู่แล้วเนื่องจากไม่จำเป็นต้องโหลดไลบรารีเพิ่มเติมใด ๆ (* ฉันวัดบนเซิร์ฟเวอร์ linux ของฉันด้วยความเร็วที่แตกต่างกัน ~ 160 เท่ามากกว่า 1,000 รอบซ้ำ)
printf -v date
ไม่หลอกลวงย่อย ข้อมูลที่ดีมาก !!
เมื่อใดก็ตามที่ฉันมีงานเช่นนี้ฉันก็จะล้มลง
$ man strftime
เพื่อเตือนตัวเองถึงความเป็นไปได้ทั้งหมด
ถ้าคุณต้องการปีในรูปแบบตัวเลขสองตัวเช่น 17 มากกว่า 2017 ให้ทำดังนี้:
DATE=`date +%d-%m-%y`
#!/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
ฉันใช้$(date +"%Y-%m-%d")
หรือ$(date +"%Y-%m-%d %T")
กับเวลาและชั่วโมง
คุณสามารถกำหนดวันที่เป็นตัวแปรสภาพแวดล้อมและหลังจากนั้นคุณสามารถใช้งานได้
setenv DATE `date "+%Y-%m-%d"`
echo "----------- ${DATE} -------------"
หรือ
DATE =`date "+%Y-%m-%d"`
echo "----------- ${DATE} -------------"