比较 shell 脚本中的两个日期
Compare two dates in shell script
我需要比较存储在两个变量中的两个日期,格式是 YYYY-MM-DD
。我想我可以将它们存储在另一个变量中并使用一些 tr -d "-"
,然后像整数一样进行比较,但我不知道如何。提前致谢!
您可以使用 date +%s -d your_date
获取自称为 "epoch" 的固定实例(1970-01-01,00:00 UTC)以来的秒数。一旦你明白了,几乎任何关于日期的事情都会变得非常容易。还有几个选项可以将数字转换回日期。
您可能需要呼唤expr
,这取决于您的谜底shell:
d1="2015-03-31" d2="2015-04-01"
if [ "$d1" = "$d2" ]; then
echo "same day"
elif expr "$d1" "<" "$d2" >/dev/null; then
echo "d1 is earlier than d2"
else
echo "d1 is later than d2"
fi
d1 is earlier than d2
test
命令(或其别名 [
)仅实现字符串相等和不等运算符。当您给出 (non-bash) shell 这个命令时:
[ "$d1" > "$d2" ]
> "$d2"
部分被视为标准输出重定向。创建了一个名为(在本例中)“2015-04-01”的零长度文件,条件命令变为
[ "$d1" ]
并且由于变量非空,因此计算结果为成功状态。
文件大小为零,因为 [
命令不生成标准输出。
我需要比较存储在两个变量中的两个日期,格式是 YYYY-MM-DD
。我想我可以将它们存储在另一个变量中并使用一些 tr -d "-"
,然后像整数一样进行比较,但我不知道如何。提前致谢!
您可以使用 date +%s -d your_date
获取自称为 "epoch" 的固定实例(1970-01-01,00:00 UTC)以来的秒数。一旦你明白了,几乎任何关于日期的事情都会变得非常容易。还有几个选项可以将数字转换回日期。
您可能需要呼唤expr
,这取决于您的谜底shell:
d1="2015-03-31" d2="2015-04-01"
if [ "$d1" = "$d2" ]; then
echo "same day"
elif expr "$d1" "<" "$d2" >/dev/null; then
echo "d1 is earlier than d2"
else
echo "d1 is later than d2"
fi
d1 is earlier than d2
test
命令(或其别名 [
)仅实现字符串相等和不等运算符。当您给出 (non-bash) shell 这个命令时:
[ "$d1" > "$d2" ]
> "$d2"
部分被视为标准输出重定向。创建了一个名为(在本例中)“2015-04-01”的零长度文件,条件命令变为
[ "$d1" ]
并且由于变量非空,因此计算结果为成功状态。
文件大小为零,因为 [
命令不生成标准输出。