我有一个 Bash shell 脚本,用于检查 shell 变量是否包含数字:
if ! [[ "$step" =~ ^[0-9]+$ ]]
then
exec >&2; echo "error: $step is Not a step number.";
exit 1
fi
现在我需要执行类似的检查来查看变量是否包含所需格式的日期,即YYYY-MM-DD
(示例:今天是 2013 年 5 月 13 日)与破折号。如何使用 Bash shell 中的正则表达式来完成此操作,或者我是否需要外部程序来完成此操作?
正则表达式不是完成这项工作的正确工具。
e.g.
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
验证。正则表达式仅用于格式,日期用于日期验证。
because date -d
接受类似字符串02/27/2012
too.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)