
我有一個像這樣的陣列:
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
您必須循環數組以查找是否存在匹配的字串,或更改為關聯數組並使用字串作為鍵。
另請注意,您可能不希望在賦值中使用逗號,而是在值中得到文字逗號,如上所示。