
У меня есть такой массив:
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
Вам придется выполнить цикл по массиву, чтобы найти соответствующую строку, или перейти к ассоциативному массиву и использовать строки в качестве ключей.
Также обратите внимание, что вам, вероятно, не нужны запятые в назначении, вы получите буквальные запятые в значениях, как показано выше.