Tutoriales

Arreglo asociativo Bash explicado con ejemplos en Linux

[*]

Este es el segundo artículo que forma parte de Bash Arrays. En el artículo anterior discutimos cómo usar. está trabajando Matrices indexadas en Bash. En esta guía discutiremos sobre Matriz asociativa Bash detallado con ejemplos en Linux.

Las matrices asociativas se basan en pares clave-valor. En algunos idiomas también se le llama Diccionarios o Mapas hash. La principal diferencia entre las matrices indexadas y asociativas es que las matrices indexadas funcionan según el valor del índice y cada elemento de la matriz se asigna a una posición de índice específica de la matriz. Una matriz asociativa usa un «Llave» para representar el valor en lugar de las posiciones del índice.

Profundicemos y veamos cómo se usan las matrices asociativas en bash.

Inicializar matriz asociativa

A diferencia de una matriz indexada, no puede crear una matriz asociativa sin usar. inicializar declare Mando.

Utilizar el declare Comando con -A Bandera.

$ declare -A STAR_PLAYERS=()

Ahora una matriz vacía llamada «STAR_PLAYERS» creado. También puede agregar elementos a la matriz a medida que se inicializa, si lo desea.

$ declare -A STAR_PLAYERS=( [Argentina]="Messi" [Brazil]="Neymar" [England]="Kane" )

En el código anterior, las claves están entre corchetes y los valores deben ir seguidos de un signo igual sin espacios. No es necesario utilizar una coma o un punto y coma como separador entre elementos.

Para una mejor legibilidad, puede escribir los elementos de la matriz en varias líneas.

$ declare -A STAR_PLAYERS=(
 [Argentina]="Messi"
 [Brazil]="Neymar"
 [England]="Rooney"
)

Mostrar elementos de matriz

Tienes que usar eso echo o printf Comando en bash para imprimir el contenido de la matriz. Similar a cómo usamos la variable especial * y @ para imprimir la matriz indexada, se debe usar lo mismo para imprimir matrices asociativas también.

$ echo $STAR_PLAYERS[@]
$ echo $STAR_PLAYERS[*]
Imprimir matriz asociativa

Hay una diferencia significativa entre * y @ y conoce la diferencia * y @ y cómo funciona con matrices, lea la sección «Bucle sobre elementos de matriz» en nuestro Bash por bucle Manual.

Cuando intenta imprimir los elementos de la matriz sin usar * o @, la salida está vacía.

$ echo $STAR_PLAYERS
Imprimir matriz sin * o @
Imprimir matriz sin * o @

Incluso si observa la salida anterior, solo se imprimen los valores, no las claves. Los valores que ha impreso no se ordenarán. Puede capturar el valor de un artículo en particular con su clave.

$ echo $STAR_PLAYERS[Brazil]
Imprimir elemento específico
Imprimir elemento específico

Agregar nuevos elementos a la matriz

Agregar un nuevo elemento a la matriz es fácil. Todo lo que tiene que hacer es crear un nuevo par clave-valor como se muestra a continuación.

$ STAR_PLAYERS[Belgium]="Hazard"
$ echo $STAR_PLAYERS[@]
Agrega un nuevo elemento a la matriz
Agrega un nuevo elemento a la matriz

Si intenta utilizar la misma clave que ya existe en la matriz, el valor se sobrescribirá con el nuevo.

$ STAR_PLAYERS[England]="Sterling"
$ echo $STAR_PLAYERS[@]
Sobrescribir valor
Sobrescribir valor

Agregar nuevos elementos a la matriz

También puede agregar elementos a una matriz utilizando la siguiente sintaxis.

$ STAR_PLAYERS+=([Spain]="Ramos")
$ echo $STAR_PLAYERS[@]
Agregar valor a la matriz
Agregar valor a la matriz

A partir de los ejemplos anteriores, es posible que haya entendido que solo se imprimen los valores. Puede obtener la lista de claves simplemente anteponiendo que "!" Icono con la matriz.

$ echo $!STAR_PLAYERS[@]
Imprime la clave sola
Imprime la clave sola

Si desea imprimir la clave y el valor al mismo tiempo, puede utilizar el for loop.

for elem in "$!STAR_PLAYERS[@]"
do
 echo "key : $elem" -- "value: $STAR_PLAYERS[$elem]"
done
Imprimir claves y valores
Imprimir claves y valores

Longitud de la matriz asociativa

Puede determinar la longitud de la matriz asociativa, es decir, el número total de elementos en la matriz, utilizando prefijos "#" Icono con la matriz. Esto también es común con las matrices indexadas.

$ echo $#STAR_PLAYERS[@]
Longitud de una matriz
Longitud de una matriz

Verifique si hay un elemento en la matriz

A veces, es posible que desee verificar que el elemento ya existe en la matriz antes de procesar un elemento en particular. Hay muchas formas de hacer esto, pero a continuación se muestra la forma más sencilla.

Yo uso la declaración condicional con el -n Bandera que comprueba si la longitud de la cadena devuelta por $STAR_PLAYERS[Argentina] no es cero. Expande la clave dada y el valor se compara con eso. -n Bandera.

if [[ -n "$STAR_PLAYERS[Argentina]" ]] 
then
  echo "Element is present"
else
  echo "Element not present"
fi
Verifique la presencia del elemento en la matriz
Verifique la presencia del elemento en la matriz

Matriz asociativa de solo lectura

Puede hacer que una matriz asociativa sea de solo lectura. En un estado de solo lectura, después de que se haya inicializado la matriz, no puede agregar nuevos elementos a la matriz o cambiar valores dentro de la matriz. Junto con declare Comando que tienes que usar -r Bandera.

$ declare -r -A STAR_PLAYERS=(
 [Argentina]="Messi"
 [Brazil]="Neymar"
 [England]="Rooney"
)
$ STAR_PLAYERS[Spain]="Ramos"
$ STAR_PLAYERS[England]="Sterling"
$ echo $STAR_PLAYERS[@]
Matriz asociativa de solo lectura
Matriz asociativa de solo lectura

Quitar elementos

Si desea eliminar un elemento específico de la matriz, puede unset Comando con el nombre de la clave del elemento. Por ejemplo, si quiero eliminar el elemento (Spain="Ramos") entonces la sintaxis debería ser la siguiente.

$ unset STAR_PLAYERS[Spain]
Eliminar elemento específico
Eliminar elemento específico

Vaciar una matriz

También puede eliminar todos los elementos de la matriz y dejarla vacía reinicializando la matriz como se muestra a continuación.

$ echo $STAR_PLAYERS[@]
$ declare -A STAR_PLAYERS=()
Vacía la matriz
Vacía la matriz

Quitar matriz

Si desea eliminar la matriz, puede usar el nombre de la matriz sin una clave.

$ unset STAR_PLAYERS
Quitar matriz
Quitar matriz

diploma

En este artículo vimos qué son las matrices asociativas en bash y algunas de sus funciones. La desventaja de bash es que tienes que escribir algo de lógica manualmente o usar herramientas externas para obtener el resultado que deseas. Por ejemplo, si necesito convertir matrices asociativas a objetos json, tengo que usar jq Herramienta no integrada en Bash. Aquí es donde debe intentar usar Python, que tiene métodos fáciles de usar cuando necesita trabajar con matrices y otras estructuras de datos.

Publicaciones relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba