我了解如何使用該date命令重新格式化日期,我對此很滿意。但是,我有一個問題,我正在苦苦掙扎 - 我想重新格式化的日期是另一個命令的輸出,所以我將它存盤在變數中。我正在努力解決如何指定我想要獲取一個命令的輸出,并通過 運行它date -d,并將其存盤在另一個變數中的語法。這是我嘗試過的:
expdate=`get_expire_date.sh`
echo $expdate
Mon 23 Mar 2022 05:05:05 PM UTC
expdval=`date -d'($expdate)'`
echo $expdval
我得到的是今天的日期,而不是腳本輸出中轉換后的到期日期。當然,如果我不使用括號,它會將 $expdate 視為要翻譯的文字文本并給出錯誤,而如果我不使用單引號,它會使用日期字串中的空格作為分隔符,并且只獲取第一個令牌。
我究竟做錯了什么?
uj5u.com熱心網友回復:
我發現我不得不使用雙引號代替,就像這樣(對舊的做事方式感到抱歉,更新到新的 shell 語法):
expdval=$(date -d"$(get_expire_date.sh)")
uj5u.com熱心網友回復:
首先,引數擴展不會發生在單引號內。您需要更改單引號
expdval=`date -d'($expdate)'`
雙引號
expdval=`date -d"($expdate)"`
其次,括號創建了一個無效的輸入,這會導致(出于我不太理解的原因)當天午夜的輸出。(您將獲得與無效日期相同的結果date -d ""。)
去掉括號,你會得到相同的日期(因為輸入格式與默認輸出格式匹配)。
$ date -d "$expdate"
Wed Mar 23 13:05:05 EDT 2022
要實際操作它,您需要一個顯式的輸出格式:
$ date -d "$expdate" %Y-%m-%d
2022-03-23
或某種形式的日期“算術”:
$ date -d "$expdate 2 days"
Fri Mar 25 13:05:05 EDT 2022
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/375462.html
