linux - Eval 未在 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)
它显示了错误的结果,即 Fri Aug 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
as${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 时运行的
推荐阅读
- google-oauth - Google Oauth signin page returning 500 error with electron
- python - 计算 N 维的简并状态
- reactjs - 反应路由。如何生成地址
- javascript - 节点红色 ReferenceError:la 未定义(第 1 行,第 8 列)
- python - 使用 groupby idcolumn 和 cumsum of timedelta 在时间序列中标记“trips”
- angular - 在使用响应式表单时将模板引用变量绑定到 ngModel
- postgresql - 如何在 Postgres 中获取简短的日期名称,例如“Mon”、“Tue”、“Wed”
- flutter - 将回调从模型传递到 Flutter 中的 GestureDetector 的语法
- ajax - Spring mvc使用AJAX一次上传多个文件不起作用
- c# - FFmpeg 停止进程 C#