Pesquisa de string exata no array

Pesquisa de string exata no array

Eu tenho uma matriz como:

moduleList=(AB, ABCdef, ABCd)

Minha matriz é uma matriz indexada numericamente e não uma matriz associativa. Quero fazer uma correspondência exata para cada elemento do array e executar determinadas tarefas.

Atualmente estou fazendo algo como:

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



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

Mas ambas as condições estão se tornando verdadeiras, como "AB"está em cada palavra. Como posso distinguir cada condição com base em uma correspondência exata?

Responder1

${moduleList["AB"]}ou o mesmo sem as aspas pega o valor de uma variável chamada ABe o usa como índice. Se essa variável não estiver definida, o valor obtido será zero e isso se expandirá para AB, o item zero da matriz. Essa é uma string não vazia, então é verdadeira.

Mas ambas as condições estão se tornando verdadeiras, pois "AB" está presente em cada palavra.

Esta, simplesmente, não é a razão. Você obteria o mesmo com ${moduleList["x"]}, ou algo assim. Ou, se a variável nomeadaédefinido como um número, você obtém o item apropriado na matriz:

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

Você terá que percorrer o array para descobrir se existe uma string correspondente ou mudar para um array associativo e usar as strings como chaves.

Observe também que você provavelmente não deseja as vírgulas na tarefa; você obtém vírgulas literais nos valores, como visto acima.

informação relacionada