
[*]
Matrices son un tipo de estructura de datos que se utiliza para almacenar valores de cierto tipo. Puede pensar en las matrices como una variable, pero una variable solo puede almacenar un valor, mientras que una matriz puede almacenar varios valores en ella. El concepto de matriz no solo está ligado a bash. Cada lenguaje de programación con el que trabaja contiene matrices, pero con diferencias de implementación.
Bash admite dos tipos de matrices:
- Matriz indexada
- Matriz asociativa
Las matrices indexadas son un tipo de matriz en la que los elementos (valores) se almacenan y asignan con un número entero que comienza con para norte. Los elementos dentro de la matriz se referencian mediante el número de índice. Puede encontrar más información sobre esto en el próximo artículo. El enfoque de este artículo está solo en matrices indexadas.
Cómo inicializar una matriz indexada en bash
El primer paso para trabajar con la matriz es crearla. El término crear, definir, inicializar una matriz se usa indistintamente, pero indica el mismo significado: crear la matriz.
Para crear una matriz, debe usar corchetes y colocar los elementos (valores) de la matriz entre corchetes.
$ arr1=( one 2 three 4 )
Puntos importantes a tener en cuenta:
- Las matrices Bash pueden almacenar elementos de un tipo de datos diferente. En algunos lenguajes de programación, solo puede almacenar valores en una matriz del mismo tipo.
- No hay restricciones sobre cuántos elementos se pueden almacenar en la matriz. Esto depende de la disponibilidad de la memoria de su sistema.
También puedes usar declare
Comando con el -a
Marcar para crear una matriz indexada.
$ declare -a arr1
$ arr1=( one 2 three 4 )
O,
$ declare -a arr1=( one 2 three 4 )
Cómo agregar o mostrar elementos de una matriz
Puede crear una matriz de valores como se muestra en la sección anterior, o puede simplemente crear una matriz vacía y agregar valores más tarde. A continuación se muestra cómo crear una matriz vacía.
$ locations=()
Cada elemento de una matriz tiene un valor de índice asociado, comenzando con para norte. Debe agregar nuevos elementos a una matriz usando index.
$ locations[0]="Chennai"
$ locations[1]="Mumbai"
Aquí está la representación gráfica de agregar elementos a una matriz.
Para mostrar los elementos en una matriz, puede utilizar una de las siguientes sintaxis.
$ echo $locations[@]
$ echo $locations[*]
Para conocer la diferencia entre @ y * y cómo funciona con matrices, lea la sección «Bucle sobre elementos de matriz» en nuestro Bash por bucle Manual.
Cuando intenta enumerar los elementos de la matriz sin usar @
o *
solo se imprime el primer elemento de la matriz.
$ echo $locations
Puede acceder a un elemento específico directamente desde su posición de índice.
$ echo $locations[1]
Valor de índice de una matriz
En la sección anterior, mostré cómo usar la posición del índice para agregar elementos en una matriz. Al agregar matrices usando índices, puede omitir elementos y agregarlos en los distintos índices.
Las posiciones de la matriz tienen dos elementos en posiciones y 1. Ahora puedo omitir el índice 2 y agregarlo a los distintos índices.
$ locations[5]="Delhi"
En la imagen de arriba, puede ver que agregué un nuevo elemento a la matriz en el índice 5.
Si desea generar los valores de índice de los elementos, antepóngalo a la matriz "!"
Símbolo de la siguiente manera:
$ echo $!locations[@]
Esto solo imprimirá los valores del índice en lugar de imprimir los elementos.
Para imprimir tanto el índice como los elementos, utilice el fragmento a continuación.
for val in $!locations[@] do echo "index = $val , value = $locations[$val]" done
Agregar valores a una matriz
Puede agregar nuevos elementos a una matriz sin usar sus valores de índice, que agrega elementos a la matriz.
locations=( Chennai Mumbai Delhi ) locations+=( Bangalore ) locations+=( Hyderabad )
$ echo $locations[@]
$ echo $!locations[@]
Determinar la longitud de una matriz
Puede averiguar la cantidad de elementos en una matriz colocando el prefijo al frente #
Símbolo delante de la matriz.
$ echo $#locations[@]
Usa el mismo #
Símbolo que también puede saber si la matriz está vacía o no.
if [[ $#locations[@] -ne 0 ]]; then echo "Array is Not empty" else echo "Array is Empty" fi
Eliminar elementos de una matriz
Para eliminar un elemento de la matriz, puede utilizar el unset
Mando. Eche un vistazo al siguiente ejemplo que muestra el uso de la unset
comandar el elemento desde el index(2)
es removido.
$ echo $locations[@]
$ unset locations[2]
$ echo $locations[@]
Quitar una matriz
Puedes usar lo mismo para eliminar la matriz. unset
Mando.
$ unset locations
$ echo $locations[@]
Vaciar una matriz
A veces, es posible que desee eliminar todos los elementos de la matriz y dejar la matriz en blanco. En ese caso, puede volver a crear la matriz.
$ echo $locations[@]
Chennai Mumbai Delhi Hyderabad Bangalore
$ locations=()
$ echo $locations[@]
Guardar la salida del comando como una matriz
Puede ejecutar cualquier comando e intentar guardar la salida en una matriz. El comando debe incluirse con Soportes para guardar la salida como una matriz.
$ path_list=( $(echo $PATH | tr ":" "n") )
$ echo $path_list[@]
Rebanado de matriz
El corte le brinda la flexibilidad de extraer elementos específicos de la matriz en función de su posición de índice.
La sintaxis para cortar es la siguiente:
$locations[@]:index:length
Si desea tomar todos los elementos pero desde una determinada posición de índice inicial, así es como puede hacerlo usando solo el índice.
$ echo $locations[@]:index # syntax
$ echo $locations[@]:2
En el ejemplo anterior, la matriz se imprime desde la posición de índice 2 hasta el último elemento. Si especifica la longitud con el índice, se usa la siguiente fórmula para dividir la matriz.
From index to index+length-1 (inclusive) # Formula
$ echo $locations[@]:1:3
Si omite el índice y solo especifica la longitud, se cortará la siguiente fórmula.
From Index 0 to length-1 (inclusive)
$ echo $locations[@]::4
diploma
En este artículo, te he explicado matriz indexada bash. Las matrices son muy importantes cuando empiezas a escribir scripts bash complejos. Le brindan la capacidad de guardar, recuperar y editar fácilmente datos de varios tipos. A diferencia de los lenguajes de programación como Python, no hay formas integradas de usar simplemente matrices para realizar algunas tareas complejas que aún se pueden realizar.
En nuestra próxima guía hablaremos de Matriz asociativa en detalle.