數組中的精確字串搜索

數組中的精確字串搜索

我有一個像這樣的陣列:

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

您必須循環數組以查找是否存在匹配的字串,或更改為關聯數組並使用字串作為鍵。

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

相關內容