Tutoriales

Matriz indexada por bash explicada con ejemplos

[*]

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 0 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 0 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.

Representación pictórica: agregue un elemento a una matriz

Para mostrar los elementos en una matriz, puede utilizar una de las siguientes sintaxis.

$ echo $locations[@]
$ echo $locations[*]
Inicializar e imprimir matriz
Inicializar e imprimir la matriz

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
Matriz sin operadores * o @
Matriz sin operadores * o @

Puede acceder a un elemento específico directamente desde su posición de índice.

$ echo $locations[1]
Imprimir matriz en una posición de índice específica
Imprimir matriz en una posición de índice específica

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 0 y 1. Ahora puedo omitir el índice 2 y agregarlo a los distintos índices.

$ locations[5]="Delhi"
agregar ítem nuevo
agregar ítem nuevo

En la imagen de arriba, puede ver que agregué un nuevo elemento a la matriz en el índice 5.

Representación pictórica: agregue un nuevo elemento a una matriz
Representación pictórica: agregue un nuevo elemento a una matriz

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.

Posición de índice de impresión
Posición de índice de impresión

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
Imprimir índice y elementos
Imprimir índice y elementos

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[@]
Agregar elementos a la matriz
Agregar elementos a la matriz

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[@]
Longitud de una matriz
Longitud de una matriz

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
Descubra si una matriz está vacía o no
Descubra si una matriz está vacía o no

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[@]
Eliminar elementos de una matriz
Eliminar elementos de una matriz

Quitar una matriz

Puedes usar lo mismo para eliminar la matriz. unset Mando.

$ unset locations
$ echo $locations[@]
Quitar matriz
Quitar matriz

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[@]
Hacer una matriz vacía
Hacer una matriz vacía

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[@]
Guardar la salida del comando como una matriz
Guardar la salida del comando como una matriz

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
Corte - posición de índice
Corte – posición de índice

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
Corte: índice y longitud
Corte: índice y longitud

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
Corte - longitud sola
Corte – longitud sola

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.

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