这是我的剧本
#!/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。
有人能帮我吗?
发布于 2020-08-14 09:29:48
这一行的主要问题是:
dateformat=(date -d \"+ $EXPIRYTIME minutes\" +"%Y-%m-%dT%H-%M-%S+00:00")其中,=(...)要求为dateformat变量赋值数组。
然后eval $dateformat无法提供数组下标,所以bash将使用分配给index=0的任何值,在本例中是date;净结果是运行date (没有args),并得到当前日期/时间。
你有几个选择:
1-继续使用数组,但确保引用了整个数组索引集:
$ dateformat=(date -d \"+ $EXPIRYTIME minutes\" +"%Y-%m-%dT%H-%M-%S+00:00")
$ eval "${dateformat[@]}"
2020-08-14T04-53-55+00:002-将变量定义为单个字符串:
$ 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日):23:55 CDT 2020时运行的。
https://stackoverflow.com/questions/63409858
复制相似问题