评估未在bash脚本中显示正确的日期格式

问题描述

这是我的剧本

#!/bin/bash
EXPIRYTIME=30
dateformat=(date -d \"+ $EXPIRYTIME minutes\" +"%Y-%m-%dT%H-%M-%S+00:00")
#dateformat=(date + "%Y-%m-%dT%H-%M-%S+00:00")
expiry=$(eval $dateformat)

它显示了错误的结果,即 星期五8月14日14:36:17 IST 2020 \

但是当我在cli中运行时,它会显示正确的格式,即: 2020-08-14T15-03-52 + 00:00

有人可以帮我吗?

解决方法

主要问题在于此行:

dateformat=(date -d \"+ $EXPIRYTIME minutes\" +"%Y-%m-%dT%H-%M-%S+00:00")

其中=(...)表示要为dateformat变量分配值数组。

然后eval $dateformat无法提供数组下标,因此bash将使用分配给index = 0的任何值,本例中为date;最终结果是您最终运行date(没有参数),并且获得了当前日期/时间。

您有两种选择:

1-继续使用数组,但请确保引用了整个数组索引集:

$ dateformat=(date -d \"+ $EXPIRYTIME minutes\" +"%Y-%m-%dT%H-%M-%S+00:00")
$ eval "${dateformat[@]}"
2020-08-14T04-53-55+00:00

2-将变量定义为单个字符串:

$ dateformat='date -d "+ '"${EXPIRYTIME}"' minutes" +"%Y-%m-%dT%H-%M-%S+00:00"'
$ eval "${dateformat}"
2020-08-14T04-53-57+00:00

请记住,在这种特殊情况下,不需要eval,因为${EXPIRYTIME}可以直接馈送到date命令:

$ date -d "+ ${EXPIRYTIME} minutes" +"%Y-%m-%dT%H-%M-%S+00:00"
2020-08-14T04-53-58+00:00

注意:以上示例是在本地系统时间为CDT 2020年8月14日星期五04:23:55时运行的

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...