2015-01-09 95 views
0

我有一個日期值和一個相關的整數,我想通過bash腳本存儲在一個數組中。目前,我只是把這些問題放在了我認爲問題本地化的地方。使用日期值作爲bash關聯數組中的鍵

chartDate=2014-12-01; 
dayTotal=5; 

dataArray[${chartDate}]=$dayTotal; 

在嘗試上述我得到:

line 125: 2014-12-01: value too great for base (error token is "01")

我得到不同的錯誤,如果我嘗試的以下兩種:

dataArray["${chartDate}"]=$dayTotal; 
dataArray[\""${chartDate}"\"]=$dayTotal; 

有什麼建議?

完整的腳本是:

function getChartData() { 


    chartDate=$(chartStartsAt); #$(chartStartAt) returns a date formatted %Y-%m-%d 
    echo $chartDate; 

    now=`date +%Y-%m-%d`; 
    echo $now; 

    issueCount=`jq '. | length' output/json/FullIssueList.json`; #returns an integer 

    declare -a dataArray; 

    while [ "${chartDate}" \< "${now}" ] 
     do 
      #increment chartDate by one day 
      chartDate=$(date -j -v +1d -f "%Y-%m-%d" "${chartDate}" +%Y-%m-%d); 
      echo $chartDate 

      #Get number of records that match that date 
      dayTotal=`grep -c "${chartDate}" output/json/FullIssueList.json`; 
      echo $dayTotal; 

      #Put values in the array 
      dataArray[${chartDate}]=$dayTotal; 
     done 

    for K in "${!dataArray[@]}"; do echo $K --- ${MYMAP[$K]}; done 

} 

下面是在意見建議-uxv輸出,注意那裏有另一個7或8個以上結果是:

+ set -uxv 
+ dataArray[${chartDate}]=0 
+ '[' 2014-12-06 '<' 2015-01-09 ']' 
date -j -v +1d -f "%Y-%m-%d" "${chartDate}" +%Y-%m-%d 
++ date -j -v +1d -f %Y-%m-%d 2014-12-06 +%Y-%m-%d 
+ chartDate=2014-12-07 
+ echo 2014-12-07 
2014-12-07 
grep -c "${chartDate}" output/json/FullIssueList.json 
++ grep -c 2014-12-07 output/json/FullIssueList.json 
+ dayTotal=0 
+ echo 0 
0 
+ set -uxv 
+ dataArray[${chartDate}]=0 
+ '[' 2014-12-07 '<' 2015-01-09 ']' 
date -j -v +1d -f "%Y-%m-%d" "${chartDate}" +%Y-%m-%d 
++ date -j -v +1d -f %Y-%m-%d 2014-12-07 +%Y-%m-%d 
+ chartDate=2014-12-08 
+ echo 2014-12-08 
2014-12-08 
grep -c "${chartDate}" output/json/FullIssueList.json 
++ grep -c 2014-12-08 output/json/FullIssueList.json 
+ dayTotal=0 
+ echo 0 
0 
+ set -uxv 
+ dataArray[${chartDate}]=0 
./GetJiraReleaseIssues.sh: line 125: 2014-12-08: value too great for base (error token is "08") 
+0

用bash 4.2.8正常工作。這條線的輸出是'5':'chartDate = 2014-12-01; dayTotal = 5; dataArray中[$ {chartDate}] = $ dayTotal; echo $ {dataArray [$ {chartDate}]}' – Cyrus

+0

有趣的是,這也適用於我。這可能是因爲我在循環日期的方式。我將在帖子中添加更多信息。 – TheMightyLlama

回答

2

要使用關聯數組,你必須首先聲明它

declare -A dataArray 
#  ^
# CAPITAL A 

如果你不這樣做,bash對待a作爲一個正常的人,並試圖將索引解釋爲一個數字表達式。

+0

是的,我已經這樣做了。謝謝。 – TheMightyLlama

+0

@TheMightyLlama:你運行什麼bash版本?這個對我有用。 – choroba

+0

我在3試過,剛剛升級到4.同樣的問題。 – TheMightyLlama