我正在写一个shell脚本,我很困惑,为什么我的datevalidation代码不工作。 我尝试了以下解决scheme来find类似的问题,但is_valid始终设置为1:
date "+%m/%d/%Y" -d "$1" 2>1 > /dev/null //or.. date -d "2012-02-29" > /dev/null 2>&1 is_valid=$? #always set to 1, even when given a valid date
我如何正确validationdate格式? date只能以MM / DD / YYYY格式有效
我也试过这个解决scheme: Linux Bash – date格式,但它总是拒绝date。
Mac OS X附带的BSD date
不支持-d
选项(或者更确切地说,它使用-d
来表示完全不同的内容)。 要么安装GNU date
,要么使用以下来验证你的输入字符串:
date -f "%Y-%m-%d" -j "2012-02-29" >/dev/null 2>&1
-f
提供输入格式, -j
指示date
以简单输出日期,而不是尝试设置系统时钟。
我想出了这个小功能:
function isDateInvalid() { date -d "$1" "+%m/%d/%Y" > /dev/null 2>&1 res=$? echo "$res" } isDateInvalid "2012-02-219" 1 isDateInvalid "2012-02-29" 0
for y in {2013..2014}; do for m in {01..12}; do for d in {01..31}; do [[ ! "`date -jf %Y%m%d $y$m$d +%Y%m%d`" = "$y$m$d" ]] && continue echo $y.$m.$d done done done
如果字符串匹配,循环将继续…