关联数组中的bash find关键字

关联数组中的bash find关键字,bash,associative-array,Bash,Associative Array,我有来自聊天服务器的传入消息,需要与关键字列表进行比较。我使用的是常规数组,但希望切换到关联数组以提高处理速度 单词列表将位于一个名为aWords的数组中,值将是一个“类型”指示符,即aWords[dam]=“1”,其中1是图例中的脏话,用于通知用户 问题是,我需要将每个索引值与输入的$line进行比较,以查找子字符串。如果可能的话,我试图避免循环通过每个索引值 从中,我想到了子字符串删除部分 ${string#substring} Deletes shortest match of $subs

我有来自聊天服务器的传入消息,需要与关键字列表进行比较。我使用的是常规数组,但希望切换到关联数组以提高处理速度

单词列表将位于一个名为aWords的数组中,值将是一个“类型”指示符,即aWords[dam]=“1”,其中1是图例中的脏话,用于通知用户

问题是,我需要将每个索引值与输入的$line进行比较,以查找子字符串。如果可能的话,我试图避免循环通过每个索引值

从中,我想到了子字符串删除部分

${string#substring}
Deletes shortest match of $substring from front of $string.

比较从$$中去掉的字符串可能会有帮助,但是它是否也与其他单词中间的单词匹配?i、 e.将关键字与此匹配

很抱歉这篇冗长的文章,但我试图尽我所能涵盖我试图完成的所有内容。

#创建一个以冒号分隔的数组键字符串
#可以在创建阵列后执行一次。
keys=$(IFS=:;echo“${!aWords[*]}”)
如果[[”:$keys:“==*:”$word:*];然后
#$word是数组中的一个键
中的大小写${aWords[$word]}
1) 回声“Tsk-Tsk:$这个词是一个咒骂词”;;
# ...
以撒
fi

这是我第一次在bash中听说关联数组。它激励我也尝试添加一些东西,当然,我完全没有抓住要点的机会

下面是一段代码片段。我希望我了解它的工作原理:

declare -A SWEAR       #create associative array of swearwords (only once)
while read LINE
do
        [ "$LINE"] && SWEAR["$LINE"]=X
done < "/path/to/swearword/file"


while : 
do
    OUTGOING=""        #reset output "buffer"
    read REST          #read a sentence from stdin
    while "$REST"      #evaluate every word in the sentence
    do
        WORD=${REST%% *}
        REST=${REST#* }
        [ ${SWEAR[$WORD]} ] && WORD="XXXX"
        OUTGOING="$OUTGOING $WORD"
    done
    echo "$OUTGOING"    #output to stdout
done
declare-A SWEAR#创建swearwords的关联数组(仅一次)
读行时
做
[“$LINE”]&发誓[“$LINE”]=X
完成
数据处理不是
bash
的强项,事实上也不是大多数shell语言的强项。考虑使用一个更适合这个任务的语言,如Python、Perl或Ruby.if <代码> AdWord < /Cord>已经是一个关联数组,为什么不直接使用它作为<代码> [[${aWord($Word] }=1)] < /代码>?(我想我真的错过了一些东西。)到目前为止,我喜欢这个主意。有些关键字实际上是短语,所以我需要在您的示例中插入一些“”?我怀疑空格会给这个组合增加一些东西。我认为它是可以的:
declare-afoo=([“barbaz”]=yes);x=“baz”;echo${foo[$x]}
如果任何键中有空格,则将多个项分配给带有括号列表的数组时,似乎存在错误。我不知道情况是否仍然如此。如果允许我在一个肮脏的单词上扔掉完整的行,那将是非常简单的:-)
dirty_message | grep-wvif swearwordfile | clean_message