2011-02-18 62 views
2

基误差我称之为一个文件a.txt中看起来如下值大从bash的关联数组

7A1123123asd 14 
8aasdasdasd 15 

现在,我写了一些的bash代码读取该文件,并建立从值的关联数组在它

#!/bin/bash 
declare -a counter 
while read DEAL count; do 
    counter["$DEAL"]=$count 
done < oasload.job 

for i in "${!array[@]}" 
do 
    echo "key : $i" 
    echo "value : ${array[$i]}" 
done 

不幸的是,当我跑我得到以下错误

test.sh: line 6: 7A1123123asd: value too great for base (error token is "7A1123123asd") 

任何帮助一个ppreciated。

回答

3

看起来像bash对待以数字开头的键作为数字。所以,试图将7A转换为balks,因为A不是有效的10位数字。如果你可以在整个过程中用X加前缀所有的密钥,这应该解决它。

#!/bin/bash 
declare -a counter 
while read DEAL count; do 
    counter["X$DEAL"]=$count 
done < oasload.job 

for i in "${!array[@]}" 
do 
    echo "key : $i" 
    echo "value : ${array[$i]}" 
done 
+0

`declare -a foo; FOO [ “XA1”] = 1; FOO [ “Xz9”] = 2; echo“first:$ {foo [”Xa1“]},second:$ {foo [”Xz9“]},indices:$ {!foo [@]}”`give“first:2,second:2,indices: 0“ – 2011-02-19 00:19:16

1

除了在Bash 4中,关联数组声明为-A,一切都看起来不错。 4之前的版本不支持关联数组。任何版本的索引数组都使用-a来声明,或者它们是在使用语法(如array[7]="element"array=(abc def ghi 123 456))进行赋值时自动创建的。

#!/bin/bash 
declare -A counter 
while read DEAL count; do 
    counter["$DEAL"]=$count 
done < oasload.job 

for i in "${!array[@]}" 
do 
    echo "key : $i" 
    echo "value : ${array[$i]}" 
done