[英]Bash shell: How to check for specific date format?
我有一個Bash shell腳本,該腳本檢查外殼變量是否包含數字:
if ! [[ "$step" =~ ^[0-9]+$ ]]
then
exec >&2; echo "error: $step is Not a step number.";
exit 1
fi
現在,我需要進行類似的檢查,以查看變量是否包含帶有所需格式的日期,該日期為YYYY-MM-DD
(例如:今天是2013-05-13),並帶有短划線。 如何在Bash shell中使用正則表達式來完成此操作,或者我需要外部程序來執行此操作?
正則表達式不是完成這項工作的正確工具。
例如
2013-02-29 (invalid date)
2012-02-29 (valid date)
2013-10-31 (valid date)
2013-09-31 (invalid date)
...
我建議將字符串傳遞給date -d
,然后檢查返回值。 如果返回0,一切都很好。 如果返回1,則日期無效。
例如:
kent$ date -d "2012-02-29" > /dev/null 2>&1
kent$ echo $?
0
kent$ date -d "2013-02-29" > /dev/null 2>&1
kent$ echo $?
1
如果要強制格式為yyyy-mm-dd
,則可以進行正則表達式和date
驗證 。 正則表達式僅用於格式,日期用於日期驗證。
因為date -d
接受像02/27/2012
這樣的字符串。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.