Estoy tratando de usar diccionarios y me encontré con un comportamiento extraño. Cuando creo un diccionario como este:
declare -A servers servers=( ["omega"]="dev" ["delta"]="test" ["beta"]="ppd" ["alpha"]="prd" ) echo "${servers["omega"]}"
El último elemento «prd» se imprimirá en la pantalla, no en el primero. Eliminar todas las entradas excepto la primera dará como resultado la salida correcta. No estoy seguro de qué estoy haciendo mal porque cada ejemplo de código que he visto usa diccionarios como el anterior. ¿Alguien puede detectar mi error?
Saludos
Comentarios
Respuesta
Creo que el comentario de @Yurko es el camino correcto.
Con bash antes de la versión 4 (como /bin/bash
en una Mac):
- la línea
declare -A
emitirá un error (declare: -A: invalid option
) y la matriz es no declarado . - la segunda línea creará una matriz indexada : ya que el índice se evalúa como una expresión aritmética
- en expresiones aritméticas bash: las palabras «desnudas» se tratan como nombres de variables; y las variables no configuradas reciben el valor cero
Por lo tanto, cada cadena se asigna a el índice 0
.
Prueba esto:
declare -p servers
y debería ver el resultado
declare -a servers="([0]="prd")"
servers
fuera una matriz en lugar de una matriz asociativa. Compruebe si hay errores tipográficos y compruebe que la versión de bash sea al menos 4.0 (la primera en admitir matrices asociativas).