我有一个像这样的数组:
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
您必须循环数组以查找是否存在匹配的字符串,或者更改为关联数组并使用字符串作为键。
另请注意,您可能不希望在赋值中使用逗号,而是在值中得到文字逗号,如上所示。