Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在bash中比较日期和时间_Bash_Datetime_If Statement - Fatal编程技术网

在bash中比较日期和时间

在bash中比较日期和时间,bash,datetime,if-statement,Bash,Datetime,If Statement,我想比较两个日期和时间变量: 2016-01-21 17:15:06.614852743+0300 我正在尝试: MODDATE_INIT=$(stat -c %y /home/user/my_file) if [ $(stat -c %y /home/user/my_file) -lt $MODDATE_INIT ]; then cat my_file; fi" 我得到一个错误: bash:[:参数太多 我做错了什么?请帮我修改脚本 您没有引用日期字符串,因此它由shell展开并显示为 i

我想比较两个日期和时间变量:

2016-01-21 17:15:06.614852743+0300

我正在尝试:

MODDATE_INIT=$(stat -c %y /home/user/my_file)
if [ $(stat -c %y /home/user/my_file) -lt  $MODDATE_INIT ]; then cat my_file; fi"
我得到一个错误:

bash:[:参数太多 我做错了什么?请帮我修改脚本


您没有引用日期字符串,因此它由shell展开并显示为

if [ $(stat ...) -lt 2016-01-21 17:15:06...]
       ^--arg 1          ^--arg 2   ^---arg 3???
时间组件作为
-lt
测试的额外参数出现,因此“参数太多”

试一试


注意额外的引号。

我知道在这种情况下,由于stat使用的格式字符串,它不是100%必需的,但是引用命令替换也不会造成任何伤害。或者不需要引用任何内容并使用
[[
就像bash上的一样。引用只是一个问题。另一个问题是,你不能使用
-lt
来比较日期字符串,只要字符串的格式是最重要的第一顺序,并且时区是相同的。
[2016-lt“2017-10-12”]
产生“bash:[:2017-10-12:预期的整数表达式”您还可以使用直接比较文件日期的
-nt
比较器:
如果[file1-nt file2]…
if [ $(stat -c %y /home/user/my_file) -lt  "$MODDATE_INIT" ]; then cat my_file; fi"
                                           ^-------------^