Точный поиск строки в массиве

Точный поиск строки в массиве

У меня есть такой массив:

moduleList=(AB, ABCdef, ABCd)

Мой массив — это численно-индексированный массив, а не ассоциативный массив. Я хочу сделать точное совпадение для каждого элемента в массиве и выполнить определенные задачи.

В настоящее время я делаю следующее:

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



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

Но оба условия становятся истинными, как "AB"и в каждом слове. Как мне отличить каждое условие на основе точного совпадения.

решение1

${moduleList["AB"]}или то же самое без кавычек берет значение переменной с именем ABи использует его как индекс. Если эта переменная не установлена, то полученное вами значение равно нулю, и оно расширяется до AB, нулевого элемента массива. Это непустая строка, поэтому она истинна.

Но оба условия становятся верными, поскольку «АБ» присутствует в каждом слове.

Это, просто-напросто, не причина. Вы получите то же самое с ${moduleList["x"]}, или что-то еще. Или, если именованная переменнаяявляетсяприсвоив ему число, вы получите соответствующий элемент в массиве:

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

Вам придется выполнить цикл по массиву, чтобы найти соответствующую строку, или перейти к ассоциативному массиву и использовать строки в качестве ключей.

Также обратите внимание, что вам, вероятно, не нужны запятые в назначении, вы получите буквальные запятые в значениях, как показано выше.

Связанный контент