2015-01-09 98 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