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:
Y,
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.