En Bash, una matriz asociativa es una colección de pares clave-valor, donde cada clave es única y se puede acceder a cada valor usando su clave correspondiente. Para crear una matriz asociativa en Bash, debe usar la siguiente sintaxis:
Shell
1
declare-A<array-name>
El comando declare se usa para definir la variable como una matriz asociativa, y la opción -A se usa para especificar que la matriz es asociativa. Para agregar un elemento a una matriz asociativa en Bash, debe usar la siguiente sintaxis:
Shell
1
<array-name>[key]=<value>
Aquí [clave] es la clave del elemento, y es el valor asociado con la clave, aquí hay un ejemplo de cómo crear y agregar elementos a una matriz asociativa en Bash:
Shell
1
2
3
4
declare-Acars
cars["BMW"]="M5"
cars["VOLVO"]="X70"
cars["LEXUS"]="LX470"
Aquí, he creado una matriz asociativa denominada coches con tres elementos, cada uno de los cuales contiene el modelo de coche respectivo del fabricante correspondiente. Como ejemplo de cómo obtener el valor de un elemento en una matriz asociativa en Bash, aquí se muestra cómo recuperar la clave de un elemento en una matriz asociativa:
Shell
1
2
3
4
5
6
#!bin/bash
declare-Acars
cars["BMW"]="M5"
cars["VOLVO"]="X70"
cars["LEXUS"]="LX470"
echo${cars["LEXUS"]}
Se puede usar un bucle for para iterar repetidamente a través de todas las claves en una matriz asociativa. Aquí hay un ejemplo en Bash que muestra cómo hacer esto:
Shell
1
2
3
4
5
6
7
8
9
#!bin/bash
declare-Acars
cars["BMW"]="M5"
cars["VOLVO"]="X70"
cars["LEXUS"]="LX470"
forkey in"${!cars[@]}"
do
echo"The model of ${key} is ${cars[$key]}"
done
Aquí he usado la sintaxis $ {!cars[@]} para obtener todas las claves en la matriz asociativa y luego usé un ciclo for para iterar sobre todas las claves e imprimir los valores correspondientes. Las matrices asociativas son una estructura de datos poderosa que le permite almacenar pares clave-valor en Bash. Puede crear una matriz asociativa usando la sintaxis declare -A, agregarle elementos usando la sintaxis array[key]=value y acceder a los elementos usando sus claves correspondientes. Las matrices asociativas pueden ser útiles para organizar y manipular datos en sus scripts de Bash.
Este método es un poco complejo. Este método discutirá una matriz especial de secuencias de comandos Bash denominada matriz asociativa.
Una matriz asociativa es una matriz especial que puede almacenar un valor de cadena como clave o índice. Es similar a los otros lenguajes de programación.
La sintaxis general para declarar una matriz asociativa es declare -A ArrayName.
Nuestro ejemplo a continuación creará una matriz 2D que contiene cinco filas y seis columnas. A continuación se muestra el código de nuestro ejemplo.
Shell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#!/bin/bash
declare-AArray2D
RowNum=5
ColumnNum=6
for((i=1;i<=RowNum;i++))do
for((j=1;j<=ColumnNum;j++))do
Array2D[$i,$j]=$RANDOM
done
done
f1="%$((${#RowNum}+1))s"
f2=" %9s"
printf"$f1"''
for((i=1;i<=RowNum;i++))do
printf"$f2"$i
done
echo
for((j=1;j<=ColumnNum;j++))do
printf"$f1"$j
for((i=1;i<=RowNum;i++))do
printf"$f2"${Array2D[$i,$j]}
done
echo
done
En el ejemplo anterior, declaramos una matriz asociativa llamada Array2D.
Después de eso, creamos dos variables y les asignamos un valor entero. Este valor entero especifica el número de filas y columnas.
Luego creamos un ciclo anidado que llenó la matriz con el número aleatorio.
Ahora hemos terminado de declarar y organizar la matriz. Es hora de ver cómo se ve nuestra matriz 2D.
Lo hacemos usando algunos bucles, como se ve en el código. Cuando ejecute el script anterior, verá un resultado como el siguiente.
Una matriz multidimensional es un elemento muy importante para cualquier programa. Se utiliza principalmente para crear una vista de tabla de los datos y para muchos otros fines.
Este es el método más básico para crear una matriz multidimensional. En nuestro ejemplo a continuación, crearemos una matriz bidimensional muy básica.
A continuación, se muestra el código de nuestro ejemplo.
Shell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/bin/bash
ArrayOfArray_1=("Alen""24")
ArrayOfArray_2=("Walker""31")
MainArray=(
ArrayOfArray_1[@]
ArrayOfArray_2[@]
)
ArrayLength=${#MainArray[@]}
for((i=0;i<$ArrayLength;i++))
do
name=${!MainArray[i]:0:1}
age=${!MainArray[i]:1:1}
echo"Name : ${name}"
echo"Age : ${age}"
done
El código anterior muestra que declaramos dos matrices diferentes llamadas ArrayOfArray_1 y ArrayOfArray_2. Después de eso, declaramos nuestra matriz principal, cuyo elemento son estas dos matrices que declaramos recientemente.
Luego calculamos la longitud de la matriz para un bucle. Dentro del bucle, extraemos los datos de estos dos subconjuntos indexando el conjunto principal.
Por último, nos hacemos eco del resultado final. Después de ejecutar el script, obtendrá un resultado como el que se muestra a continuación. Al ejecutar este script, obtendremos lo siguiente :
O también puede ser, pasarselo por referencia. Es más entendible :
Shell
1
2
3
4
5
6
7
8
9
10
11
12
13
#!/bin/bash
get_arr(){
declare-narray_param="$1"
echo"Elementos: ${array_param[@]}"
}
arr1=(abe ce de)
arr2=(uno dos tres cuatro)
get_arr arr1
get_arr arr2
Al ejecutarlo obtendriamos lo siguiente :
Shell
1
2
3
$./array_params.sh
Elementos:abe ce de
Elementos:uno dos tres cuatro
De todas maneras, en ninguno de los casos le pasas el array como parametro. En el primer SCRIPT, desempaquetas el array enfrente de tu función, y le pasas los elementos separados por un espacio; en el segundo SCRIPT, le pasas el nombre de la variable; ya adentro, el nombre se expande y se le referencia a esa otra variable externa para que pueda ser manipulada indirectamente.