这是我的脚本
#!/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")
其中CCD_ 1表示将值的数组分配给CCD_。
然后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
注意:以上示例是在本地系统时间为8月14日星期五04:23:55 CDT 2020 时运行的