数组中的精确字符串搜索

数组中的精确字符串搜索

我有一个像这样的数组:

moduleList=(AB, ABCdef, ABCd)

我的数组是数字索引数组而不是关联数组。我想对数组中的每个元素进行精确匹配并执行某些任务。

目前我正在做这样的事情:

if [[  ${moduleList["AB"]}  ]]; then
    #do this.
fi



if [[  ${moduleList["ABCdef"]}  ]]; then
    #do that.
fi

但这两个条件都已成为现实,正如"AB"每个词中所体现的那样。如何根据精确匹配来区分每个条件。

答案1

${moduleList["AB"]}或者不带引号的相同方法采用名为 的变量的值AB,并将其用作索引。如果未设置该变量,则获得的值为零,并且扩展为AB,即数组的第零项。这是一个非空字符串,所以它是真的。

但这两个条件都成立,因为每个单词中都有“AB”。

很简单,这不是原因。你会得到同样的结果${moduleList["x"]},或者其他什么。或者,如果命名变量设置为一个数字,您将获得数组中适当的项目:

$ moduleList=(AB, ABCdef, ABCd)
$ unset x
$ echo "${moduleList[x]}"
AB,
$ x=2
$ echo ${moduleList["x"]}
ABCd

您必须循环数组以查找是否存在匹配的字符串,或者更改为关联数组并使用字符串作为键。

另请注意,您可能不希望在赋值中使用逗号,而是在值中得到文字逗号,如上所示。

相关内容