簡體   English   中英

Bash shell:如何檢查特定的日期格式?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM