Estou tentando usar dicionários e deparei com um comportamento estranho. Quando eu crio um dicionário como este:
declare -A servers servers=( ["omega"]="dev" ["delta"]="test" ["beta"]="ppd" ["alpha"]="prd" ) echo "${servers["omega"]}"
O último elemento “prd” será impresso na tela, não o primeiro. Excluir todas as entradas, exceto a primeira, resultará na saída correta. Não tenho certeza do que estou fazendo de errado porque todos os exemplos de código que dei uma olhada estão usando dicionários como acima. Alguém consegue identificar meu erro?
Saudações
Comentários
Resposta
Acho que o comentário de @Yurko é o caminho certo.
Com o bash anterior à versão 4 (como /bin/bash
em um Mac):
- a linha
declare -A
emitirá um erro (declare: -A: invalid option
) e a matriz é não declarado . - a 2ª linha criará uma matriz indexada : já que o índice é avaliado como uma expressão aritmética
- em expressões aritméticas bash: palavras “nuas” são tratadas como nomes de variáveis; e variáveis não definidas recebem o valor zero
Portanto, cada string é atribuída a o índice 0
.
Tente isto:
declare -p servers
e você deve ver a saída
declare -a servers="([0]="prd")"
servers
fosse um array em vez de um array associativo. Verifique se há erros de digitação e se a versão do bash é pelo menos 4.0 (a primeira a oferecer suporte a matrizes associativas).