簡體   English   中英

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)

它顯示了錯誤的結果,即 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 ,因為${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 時運行的

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM