2012-03-18 181 views
2

我试图将Linux中的英文字典读入关联数组,使用单词作为键和预定义的字符串作为值。这样我可以按键查找单词,看看它们是否存在。我还需要所有的话都是小写。这很简单,但bash语法正在我的方式。当我运行下面的代码时,出现'bad array subscript'错误。任何想法,为什么这可能是?在变量bash关联数组中使用变量作为键

function createArrayFromEnglishDictionary(){ 
     IFS=$'\n' 
     while read -d $'\n' line; do 
      #Read string into variable and put into lowercase. 
      index=`echo ${line,,}` 
      englishDictionaryArray[$index]="exists" 
      done < /usr/share/dict/words 
      IFS=$' \t\n' 
    } 
+0

'IFS = $'\ t \ n'与'未设置的IFS'相同。 – jordanm 2012-03-19 02:36:01

+0

语法'$ {VAR ,,}'是什么?我从来没有见过这个,并且在别处找不到任何引用 – 2017-10-04 08:00:32

+0

${VAR,,}在Bash中表示小写。 – philcolbourn 2017-12-06 00:28:47

回答

2

$index在某个时刻是空的。假设你想逐行压缩而不是空白压缩,你也可以使用totally pointless use of echo。只需使用index="${line,,}"即可。

+0

index =“$ {line ,,}”不起作用,但我不知道为什么。我曾尝试过这种方式,并期望它能够正常工作。键值分配是否与现在的情况有所不同? – Asgeir 2012-03-18 21:15:49

+0

它现在似乎工作,我第一次改变englishDictionaryArray [$索引] =“存在”到englishDictionaryArray [“$ {索引}”] =“存在”,那是行不通的。当然,这个错误是完全不直观的,我必须在“。so [”$ {index}“]作品的两边添加空格。有时我会讨厌bash。 – Asgeir 2012-03-18 21:22:54

+0

所以不要对这些东西使用bash。还有许多其他更适合这种先进的字符串杂耍和操作的脚本语言。 – 2012-03-19 18:05:19

1

结合你的工作,其他的答案声明为关联数组,试试这个:

我使用GNU的bash,版本4.2.37(1)-release下(x86_64-PC-Linux的GNU)

#!/bin/bash 
declare -A DICT 
function createDict(){ 
    while read LINE; do 
     INDEX=${LINE,,} 
     DICT[$INDEX]="exists" 
    done < /usr/share/dict/words 
} 

createDict 

echo ${DICT[hello]} 
echo ${DICT[acdfg]} 
echo ${DICT["a's"]} 
1

我认为弗洛翅膀的例子将有所帮助..

$ declare -A colour 
$ colour[elephant]="black" 
$ echo ${colour[elephant]} 
black 

$ index=elephant 
$ echo ${colour["$index"]} 
black