使用变量作为bash关联数组中的键

时间:2012-03-18 20:25:34

标签: linux bash syntax associative-array

我正在尝试将Linux中的英语词典读成关联数组,使用单词作为键和预定义字符串作为值。这样我就可以按键查找单词以查看它们是否存在。另外,我需要所有的单词都是小写的。这很简单,但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'
    }

4 个答案:

答案 0 :(得分:4)

$index在某些时候是空的。你还有一个totally pointless use of echo,假设你想要逐行而不是压缩空格。只需使用index="${line,,}"

答案 1 :(得分:2)

要在bash中使用关联数组,需要bash版本4,并且需要将数组声明为带declare -A englishDictionaryArray的关联数组

http://www.linuxjournal.com/content/bash-associative-arrays

答案 2 :(得分:2)

我认为以下示例将有所帮助..

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

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

答案 3 :(得分:0)

结合您的工作和其他答案,试试这个:

我正在使用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"]}