Использование переменной в качестве ключа в ассоциативном массиве bash - PullRequest
4 голосов
/ 19 марта 2012

Я пытаюсь прочитать английский словарь в 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 ]

4 голосов
/ 19 марта 2012

$index пусто в какой-то момент.У вас также есть довольно совершенно бессмысленное использование echo , если вы хотите, чтобы строка была дословной, а не пропущена.Просто используйте index="${line,,}".

2 голосов
/ 16 сентября 2015

думаю следующий пример поможет ..

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

$ index=elephant
$ echo ${colour["$index"]}
black
2 голосов
/ 19 марта 2012

Чтобы использовать ассоциативные массивы в bash, вам нужна bash версии 4, и вам нужно объявить массив как ассоциативный массив с declare -A englishDictionaryArray

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

0 голосов
/ 02 января 2013

Объединяя вашу работу и другие ответы, попробуйте это:

Я использую GNU bash, версия 4.2.37 (1) -релиз (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"]}
...