Búsqueda de cadena exacta en matriz

Búsqueda de cadena exacta en matriz

Tengo una matriz como:

moduleList=(AB, ABCdef, ABCd)

Mi matriz es una matriz indexada numéricamente, no una matriz asociativa. Quiero hacer una coincidencia exacta para cada elemento de la matriz y realizar determinadas tareas.

Actualmente estoy haciendo como:

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



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

Pero ambas condiciones se están volviendo verdaderas como "AB"lo está cada palabra. ¿Cómo puedo distinguir cada condición en función de una coincidencia exacta?

Respuesta1

${moduleList["AB"]}o lo mismo sin las comillas toma el valor de una variable llamada ABy la usa como índice. Si esa variable no está configurada, el valor que obtiene es cero y se expande hasta AB, el elemento cero de la matriz. Esa es una cadena que no está vacía, por lo que es veraz.

Pero ambas condiciones se cumplen ya que "AB" está en cada palabra.

Ésta, sencillamente, no es la razón. Obtendrías lo mismo con ${moduleList["x"]}o lo que sea. O, si la variable nombradaesestablecido en un número, obtienes el elemento apropiado en la matriz:

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

Tendrá que recorrer la matriz para encontrar si existe una cadena coincidente, o cambiar a una matriz asociativa y usar las cadenas como claves.

También tenga en cuenta que probablemente no desee las comas en la tarea; obtendrá comas literales en los valores, como se ve arriba.

información relacionada