
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 AB
e 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.