Eval 未在 bash 脚本中显示正确的日期格式
Eval not showing correct date format in bash script
这是我的脚本
#!/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
;最终结果是你最终 运行ning date
(没有参数)并且你得到当前的 date/time.
您有几个选择:
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
注意:上面的例子是运行,本地系统时间是Fri Aug 14 04:23:55 CDT 2020
这是我的脚本
#!/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
;最终结果是你最终 运行ning date
(没有参数)并且你得到当前的 date/time.
您有几个选择:
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
注意:上面的例子是运行,本地系统时间是Fri Aug 14 04:23:55 CDT 2020