2016-11-06 41 views
1

我想知道某個問題: 我想用數學表達式使用兩個變量來「遞增」一個日期。Linux bash //日期:使用變量和日期

bash腳本有一個變量(日期):

TS=$(date +%y-%m-%d)

我想處理一個循環中:

for((i=1; i<=$iquant; i++)) 
do 
FTS=`date '+%y-%m-%d' -d "$TS+'$i*$iquant' days"` 
FFTS=`date '+%y-%m-%d' -d "$FTS+'$idays' days"` 
echo $FTS 
echo $FFTS 
done 

當運行控制檯顯示:

date: invalid date ‘16-11-06+'1*5' days’ 
date: invalid date ‘+'5' days’ 

看起來,這些變量是沒有計算出來的......應該使用反蜱防止這個?有沒有人有建議,或者有更好的方法來解決這個問題?至於Josi

SYSTEM:4.4.0-21-通用Linux操作系統Ubuntu

+0

我的約會手冊頁不提供關於 「計算」 什麼,你呢? '人約會' –

+0

是的,確認。我也沒有說任何關於計算的內容;)。我認爲這應該是bash的工作,然後把它交給日期? –

回答

2

在bash,文字串聯是默認的。要計算一些東西明確,與美元+雙括號使用表達式,像這樣的:$(($i*$iquant))arithmetic expansion)或者更簡單地說,因爲我們在「數學」上下文現在是:$((i*iquant))(無需前綴美元)

而且降這些單引號對date命令的解析有誤導作用。

固定碼(使用iquant=5,跑到今天):

TS=$(date +%y-%m-%d) 

for((i=1; i<=iquant; i++)) 
do 
    FTS=`date '+%y-%m-%d' -d "$TS + $((i*iquant)) days"` 
    FFTS=`date '+%y-%m-%d' -d "$FTS + $idays days"` 
    echo "$FTS" 
    echo "$FFTS" 
done 

結果:

16-11-11 
16-11-12 
16-11-16 
16-11-17 
16-11-21 
16-11-22 
16-11-26 
16-11-27 
16-12-01 
16-12-02 
+0

是的,絕對正確。這固定了它。非常感謝。 –

+0

注意'$ []'圓括號也提供算術上下文,就像'$(())'一樣。 – hidefromkgb

+0

@hidefromkgb'$ []'可以工作,但它沒有記錄,非POSIX並且不推薦使用,請參閱[Bash維護者發佈的這篇文章](http://lists.gnu.org/archive/html/bug-bash/2012- 04/msg00034.html)。 –