Comprensión de matrices asociativas en Linux Bash con ejemplos

Comprensión de matrices asociativas en Linux Bash con ejemplos
Las matrices asociativas son un tipo de datos abstracto que puede considerarse como diccionarios o mapas. La forma en que difieren de otras matrices es que contienen los pares de valor clave donde las claves pueden ser arbitrarias y cadenas definidas por el usuario en lugar de los números de índice habituales. Las matrices asociadas tienen dos propiedades principales:
  • Cada clave en la matriz solo puede aparecer una vez. Puede pensar en ello como una identificación única para un usuario en una lista.
  • Un valor puede aparecer más de una vez en una matriz. Por ejemplo, dos personas en una lista pueden tener el mismo nombre pero necesitan tener diferentes ID de usuario.

En este artículo, explicaremos cómo puede declarar e inicializar matrices asociativas en Linux Bash. Daremos más detalles sobre el poder de las matrices asociativas con la ayuda de varios ejemplos.

Hemos ejecutado los ejemplos mencionados en este artículo en un sistema Buster Debian 10. Sin embargo, puede replicar fácilmente en casi todas las distribuciones de Linux.

Verificación de los requisitos previos

Para usar matrices asociativas en Linux Bash, su versión GNU Bash debe ser igual o superior a la versión 4. Abra su terminal de Linux accediendo a él a través de la búsqueda del lanzador de aplicaciones. Luego ingrese el siguiente comando para verificar su versión instalada de Bash:

$ Bash -Versión

Mi versión actual de Bash es 5.0.3, así que estoy listo para ir. En caso de que su versión bash sea inferior a 4, puede actualizar BASH ejecutando el siguiente comando como sudo:

$ sudo apt-get instalación-solo actualización de actualización

Declarar una matriz asociativa e inicializarla

Declarar una matriz asociativa es bastante simple en Bash y se puede hacer a través del comando Declarar:

$ declarar -A "ArrayName"

En nuestro ejemplo, declararemos una variable de matriz llamada SampleArray1 de la siguiente manera:

$ declarar -A samplearray1

El siguiente paso es inicializar los valores requeridos para su matriz. En nuestro ejemplo, queremos tener una matriz donde los valores son algunos nombres de países y las claves son sus abreviaturas de nombre de país relevantes. Aquí, alimentaremos los valores de la matriz, uno por uno como sigue:

$ ArrayName [clave] = valor

Ejemplo:

$ samplearray1 [chn] = China
$ samplearray1 [JPN] = Japón
$ samplearray1 [kor] = Corea
$ samplearray1 [twn] = Taiwán
$ samplearray1 [th] = Tailandia

Una alternativa rápida es declarar e inicializar una matriz en un solo comando bash de la siguiente manera:

$ declare -a arrayName = ([key1] = value1 [key2] = value2 [key3] = value3 .. . )

Así es como podemos declarar e inicializar nuestra matriz mencionada, alternativamente, de la siguiente manera:

$ declare -a samplearray1 = ([chn] = china [jpn] = japón [kor] = corea [twn] = taiwán
[Th] = Tailandia)

Ahora presentaremos algunos ejemplos que explicarán lo que puede hacer con matrices asociativas en Bash:

Ejemplo1: acceder a las teclas y valores de matriz

En este ejemplo explicaremos cómo puede:

  • Imprima un valor en una clave
  • Imprima todas las teclas de matriz a la vez
  • Imprima todos los valores de matriz a la vez

Y,

  • Imprima todos los pares de valor clave a la vez

Imprimir

Puede Imprima un valor en una clave Al usar la siguiente sintaxis del comando:

$ Echo $ ArrayName [KeyName]

Aquí está cómo podemos acceder al nombre completo de un país proporcionando la abreviatura del nombre del país, desde nuestro Samplearray1:

$ Echo $ samplearray1 [chn]
$ Echo $ samplearray1 [twn]

Si usted está interesado en Impresión de todas las teclas De su matriz asociativa, puede hacerlo usando la siguiente sintaxis:

$ para la clave en "$ !ArrayName [@] "; do echo $ key; hecho

El siguiente comando imprimirá todas las abreviaturas de nombres de país de mi SampleARRAY1 por

Usando un bucle for:

$ para la clave en "$ !SAMPLEArRAY1 [@] "; Do Echo $ Key; Hecho

Otra alternativa a la impresión de todas las claves de la matriz es mediante la expansión de los parámetros. El siguiente comando imprimirá todas las teclas en la misma línea:

$ echo "$ !Samplearray1 [@] "

Si usted está interesado en Impresión de todos los valores de la matriz a la vez, Puede hacerlo usando el bucle for de la siguiente manera:

$ para val en "$ ArrayName [@]"; hacer eco $ val; hecho

El siguiente comando imprimirá todos los nombres de países completos almacenados en mi SamplearRay1:

$ para val en "$ samplearray1 [@]"; hacer eco $ val; hecho

Otra alternativa para imprimir todos los valores de la matriz es mediante la expansión de los parámetros. El siguiente comando imprimirá todos los valores en la misma línea:

$ Echo "$ samplearray1 [@]"

El siguiente ejemplo útil Imprima todos los pares de valor clave A la vez usando el bucle for de la siguiente manera:

$ para la clave en "$ !SAMPLEArRAY1 [@] "; do echo" $ key es una abreviatura para
$ samplearray1 [$ key] "; hecho

Puede, por supuesto, hacer que esta recuperación de información sea más útil en sus complejos y significativos scripts bash.

Ejemplo 2: Contando elementos de matriz

El siguiente comando se puede usar para contar e imprimir el número de elementos en su matriz asociativa:

$ echo "$ #arrayname [@]"

La salida del siguiente comando muestra que tengo cinco elementos en mi SampleARRAY1:

$ echo "$ #samplearray1 [@]"

Ejemplo 3: Agregar nuevos datos en la matriz

Si desea agregar un elemento a una matriz después de haberlo declarado e inicializado, esta es la sintaxis que puede seguir:

$ ArrayName+= ([Key] = Value)

En mi ejemplo, quiero agregar otro país junto con la abreviatura del nombre de su condado para que use el siguiente comando:

$ samplearray1+= ([al] = Alabama)

Hacer eco de los valores de la matriz ahora sugiere que el nuevo país se agrega a mi matriz:

$ Echo "$ samplearray1 [@]"

Ejemplo 4: Eliminar el elemento de la matriz

Al desanimar una entrada de la matriz asociativa, puede eliminarla como un elemento de matriz. Este es el uso de sintaxis unset que puede usar para hacerlo:

$ Unset ArrayName [clave]

En mi ejemplo, quiero eliminar el par de valores clave "al-alabama" de mi matriz para que desasta la tecla "Al" en mi comando:

$ unset samplearray1 [AL]

Hacer eco de los valores de la matriz ahora sugiere que el valor clave al-Alabama ahora se elimina de mi matriz:

$ Echo "$ samplearray1 [@]"

Ejemplo 5: Verificar si existe un elemento en la matriz

Al usar la condición IF de la siguiente manera, puede verificar si hay un artículo disponible en su matriz asociativa o ahora:

$ if [$ ArrayName [SearchKey]+_]; Entonces Echo "existe"; else eco "no disponible"; FI

Por ejemplo, si verifico si el elemento Al-Alabama recientemente eliminado existe en mi matriz, se imprimirá el siguiente mensaje:

$ if [$ samplearray1 [al]+_]; Entonces Echo "existe"; else eco "no disponible"; FI

Si verifico un elemento que exista, se imprimirá el siguiente resultado:

$ if [$ samplearray1 [jpn]+_]; Entonces Echo "existe"; else eco "no disponible"; FI

Ejemplo 6: Eliminar una matriz

Puede eliminar una matriz asociativa de su memoria BASH utilizando el comando unset de la siguiente manera:

$ unset arrayname

Al usar el siguiente comando simple, eliminaré mi SamplearRay1 de la memoria:

$ unset samplearray1

Ahora, cuando intento imprimir todos los valores de la matriz a través del siguiente comando, no tengo ninguno.

$ Echo "$ samplearray1 [@]"

Al usar estos ejemplos en sus scripts bash de Linux, puede usar la potencia de las matrices asociativas para lograr una solución a muchos problemas complejos.