2012-03-18 178 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