En este tema, demostraremos los conceptos básicos de bash array y cómo se utilizan en las secuencias de comandos de bash shell.
Una matriz se puede definir como una colección de elementos de tipo similar. A diferencia de la mayoría de los lenguajes de programación, las matrices en los scripts bash no tienen por qué ser una colección de elementos similares. Dado que Bash no discrimina una cadena de un número, una matriz puede contener tanto cadenas como números.
Bash no proporciona soporte para matrices multidimensionales; No podemos tener elementos que sean matrices en sí mismos. Bash proporciona soporte para matrices indexadas numéricamente unidimensionales, así como matrices asociativas. Para acceder a la matriz indexada numéricamente desde el último, podemos usar índices negativos. El índice de '-1' se considerará como referencia para el último elemento. Podemos usar varios elementos en una matriz.
Declaración de matriz Bash
Los arreglos en Bash se pueden declarar de las siguientes maneras:
Crear matrices indexadas numéricamente
Podemos usar cualquier variable como una matriz indexada sin declararla.
Para declarar explícitamente una variable como Bash Array, use la palabra clave 'declarar' y la sintaxis se puede definir como:
declare -a ARRAY_NAME
dónde,
ARRAY_NAME indica el nombre que le asignaríamos al array.
Nota:Las reglas para nombrar una variable en Bash son las mismas para nombrar una matriz.
Un método general para crear una matriz indexada se puede definir de la siguiente forma:
ARRAY_NAME[index_1]=value_1 ARRAY_NAME[index_2]=value_2 ARRAY_NAME[index_n]=value_n
donde la palabra clave 'índice' se utiliza para definir números enteros positivos.
Crear matrices asociativas
A diferencia de las matrices indexadas numéricamente, las matrices asociativas se declaran primero. Podemos usar la palabra clave 'declarar' y la opción -A (mayúscula) para declarar las matrices asociativas. La sintaxis se puede definir como:
declare -A ARRAY_NAME
Un método general para crear una matriz asociativa se puede definir de la siguiente forma:
declare -A ARRAY_NAME ARRAY_NAME[index_foo]=value_foo ARRAY_NAME[index_bar]=value_bar ARRAY_NAME[index_xyz]=value_xyz
donde index_ se usa para definir cualquier cadena.
También podemos escribir el formulario anterior de la siguiente manera:
java conectar con mysql
declare -A ARRAY_NAME ARRAY_NAME=( [index_foo]=value_foo [index_bar]=value_bar [index_xyz]=value_xyz )
Inicialización de matriz Bash
Para inicializar un Bash Array, podemos usar el operador de asignación (=), especificando la lista de elementos entre paréntesis, separados por espacios como se muestra a continuación:
ARRAY_NAME=(element_1st element_2nd element_Nth)
Nota:Aquí, el primer elemento tendrá un índice 0. Además, no debería haber espacios alrededor del operador de asignación (=).
Acceder a elementos de Bash Array
Para acceder a los elementos de un Bash Array, podemos utilizar la siguiente sintaxis:
echo ${ARRAY_NAME[2]}
Imprimir matriz Bash
Podemos usar la palabra clave 'declarar' con una opción '-p' para imprimir todos los elementos de un Bash Array con todos los índices y detalles. La sintaxis para imprimir el Bash Array se puede definir como:
declare -p ARRAY_NAME
Operaciones de matriz
Una vez asignada una matriz, podemos realizar algunas operaciones útiles en ella. Podemos mostrar sus claves y valores así como modificarlo agregando o eliminando los elementos:
cómo saber el tamaño de la pantalla
Elementos de referencia
Para hacer referencia a un solo elemento, debemos conocer el número de índice del elemento. Podemos hacer referencia o imprimir cualquier elemento usando la siguiente sintaxis:
${ARRAY_NAME[index]}
Nota:Se requieren llaves ${} para evitar los operadores de expansión de nombres de archivos del shell.
Por ejemplo, imprimamos un elemento de una matriz con un índice de 2:
Guión de bash
#!/bin/bash #Script to print an element of an array with an index of 2 #declaring the array declare -a example_array=( 'Welcome''To''Javatpoint' ) #printing the element with index of 2 echo ${example_array[2]}
Producción
Javatpoint
Si usamos @ o * en lugar de un índice específico, se expandirá a todos los miembros de la matriz. Para imprimir todos los elementos, podemos utilizar el siguiente formulario:
Guión de bash
#!/bin/bash #Script to print all the elements of the array #declaring the array declare -a example_array=( 'Welcome''To''Javatpoint' ) #Printing all the elements echo '${example_array[@]}'
Producción
Welcome to Javatpoint
La única diferencia entre usar @ y * es que el formulario está entre comillas dobles mientras se usa @. En el primer caso (mientras se usa @), la expansión proporciona un resultado en una palabra para cada elemento de la matriz. Se puede describir mejor con la ayuda del 'bucle for'. Supongamos que tenemos una matriz con tres elementos, 'Bienvenido', 'Para' y 'Javatpoint':
$ example_array= (Welcome to Javatpoint)
Aplicando un bucle con @:
for i in '${example_array[@]}'; do echo '$i'; done
Producirá el siguiente resultado:
Welcome To Javatpoint
Aplicando un bucle con *, se producirá un único resultado que mantendrá todos los elementos del array como una sola palabra:
Welcome To Javatpoint
Es importante comprender el uso de @ y * porque es útil al usar el formulario para iterar a través de elementos de matriz.
Imprimir las claves de una matriz
También podemos recuperar e imprimir las claves utilizadas en matrices indexadas o asociativas, en lugar de sus respectivos valores. Se puede realizar agregando ! operador antes del nombre de la matriz como se muestra a continuación:
cómo eliminar una columna en postgresql
${!ARRAY_NAME[index]}
Ejemplo
#!/bin/bash #Script to print the keys of the array #Declaring the Array declare -a example_array=( 'Welcome''To''Javatpoint' ) #Printing the Keys echo '${!example_array[@]}'
Producción
0 1 2
Encontrar la longitud de la matriz
Podemos contar el número de elementos contenidos en la matriz usando la siguiente forma:
${#ARRAY_NAME[@]}
Ejemplo
#!/bin/bash #Declaring the Array declare -a example_array=( 'Welcome''To''Javatpoint' ) #Printing Array Length echo 'The array contains ${#example_array[@]} elements'
Producción
The array contains 3 elements
Recorrer la matriz
El método general para iterar sobre cada elemento de una matriz es utilizar el 'bucle for'.
Ejemplo
#!/bin/bash #Script to print all keys and values using loop through the array declare -a example_array=( 'Welcome''To''Javatpoint' ) #Array Loop for i in '${!example_array[@]}' do echo The key value of element '${example_array[$i]}' is '$i' done
Producción
Otro método común para recorrer una matriz es recuperar la longitud de la matriz y utilizar el bucle estilo C:
Guión de bash
#!/bin/bash #Script to loop through an array in C-style declare -a example_array=( 'Welcome''To''Javatpoint' ) #Length of the Array length=${#example_array[@]} #Array Loop for (( i=0; i <${length}; i++ )) do echo $i ${example_array[$i]} done < pre> <p> <strong>Output</strong> </p> <img src="//techcodeview.com/img/bash-tutorial/77/bash-array-2.webp" alt="Bash Array"> <h3>Adding Elements to an Array</h3> <p>We have an option to add elements to an indexed or associative array by specifying their index or associative key respectively. To add the new element to an array in bash, we can use the following form:</p> <pre> ARRAY_NAME[index_n]='New Element' </pre> <p> <strong>Example</strong> </p> <pre> #!/bin/bash #Declaring an array declare -a example_array=( 'Java''Python''PHP''HTML' ) #Adding new element example_array[4]='JavaScript' #Printing all the elements echo '${example_array[@]}' </pre> <p> <strong>Output</strong> </p> <pre> Java Python PHP HTML JavaScript </pre> <p>Another method for adding a new element to an array is by using the += operator. There is no need to specify the index in this method. We can add one or multiple elements in the array by using the following way:</p> <p> <strong>Example</strong> </p> <pre> #!/bin/bash #Declaring the Array declare -a example_array=( 'Java''Python''PHP' ) #Adding new elements example_array+=( JavaScript CSS SQL ) #Printing all the elements echo '${example_array[@]}' </pre> <p> <strong>Output</strong> </p> <pre> Java Python PHP JavaScript CSS SQL </pre> <h3>Updating Array Element</h3> <p>We can update the array element by assigning a new value to the existing array by its index value. Let's change the array element at index 4 with an element 'Javatpoint'.</p> <p> <strong>Example</strong> </p> <pre> #!/bin/bash #Script to update array element #Declaring the array declare -a example_array=( 'We''welcome''you''on''SSSIT' ) #Updating the Array Element example_array[4]=Javatpoint #Printig all the elements of the Array echo ${example_array[@]} </pre> <p> <strong>Output</strong> </p> <pre> We welcome you on Javatpoint </pre> <h3>Deleting an Element from an Array</h3> <p>If we want to delete the element from the array, we have to know its index or key in case of an associative array. An element can be removed by using the ' <strong>unset</strong> ' command:</p> <pre> unset ARRAY_NAME[index] </pre> <p>An example is shown below to provide you a better understanding of this concept:</p> <p> <strong>Example</strong> </p> <pre> #!/bin/bash #Script to delete the element from the array #Declaring the array declare -a example_array=( 'Java''Python''HTML''CSS''JavaScript' ) #Removing the element unset example_array[1] #Printing all the elements after deletion echo '${example_array[@]}' </pre> <p> <strong>Output</strong> </p> <pre> Java HTML CSS JavaScript </pre> <p>Here, we have created a simple array consisting of five elements, 'Java', 'Python', 'HTML', 'CSS' and 'JavaScript'. Then we removed the element 'Python' from the array by using 'unset' and referencing the index of it. The index of element 'Python' was '1', since bash arrays start from 0. If we check the indexes of the array after removing the element, we can see that the index for the removed element is missing. We can check the indexes by adding the following command into the script:</p> <pre> echo ${!example_array[@]} </pre> <p>The output will look like:</p> <pre> 0 2 3 4 </pre> <p>This concept also works for the associative arrays.</p> <h3>Deleting the Entire Array</h3> <p>Deleting an entire array is a very simple task. It can be performed by passing the array name as an argument to the ' <strong>unset</strong> ' command without specifying the index or key.</p> <p> <strong>Example</strong> </p> <pre> #!/bin/bash #Script to delete the entire Array #Declaring the Array declare -a example_array=( 'Java''Python''HTML''CSS''JavaScript' ) #Deleting Entire Array unset example_array #Printing the Array Elements echo ${!example_array[@]} #Printing the keys echo ${!example_array[@]} </pre> <p> <strong>Output</strong> </p> <img src="//techcodeview.com/img/bash-tutorial/77/bash-array-3.webp" alt="Bash Array"> <p>There will be no output if we try to print the content of the above script. An empty result is returned because the array doesn't exist anymore.</p> <h3>Slice Array Elements</h3> <p>Bash arrays can also be sliced from a given starting index to the ending index.</p> <p>To slice an array from starting index 'm' to an ending index 'n', we can use the following syntax:</p> <pre> SLICED_ARRAY=(${ARRAY_NAME[@]:m:n}') </pre> <p> <strong>Example</strong> </p> <pre> #!/bin/bash #Script to slice Array Element from index 1 to index 3 #Declaring the Array example_array=( 'Java''Python''HTML''CSS''JavaScript' ) #Slicing the Array sliced_array=('${example_array[@]:1:3}') #Applying for loop to iterate over each element in Array for i in '${sliced_array[@]}' do echo $i done </pre> <p> <strong>Output</strong> </p> <img src="//techcodeview.com/img/bash-tutorial/77/bash-array-4.webp" alt="Bash Array"> <hr></${length};>
Ejemplo
#!/bin/bash #Declaring an array declare -a example_array=( 'Java''Python''PHP''HTML' ) #Adding new element example_array[4]='JavaScript' #Printing all the elements echo '${example_array[@]}'
Producción
Java Python PHP HTML JavaScript
Otro método para agregar un nuevo elemento a una matriz es utilizar el operador +=. No es necesario especificar el índice en este método. Podemos agregar uno o varios elementos en la matriz de la siguiente manera:
Ejemplo
#!/bin/bash #Declaring the Array declare -a example_array=( 'Java''Python''PHP' ) #Adding new elements example_array+=( JavaScript CSS SQL ) #Printing all the elements echo '${example_array[@]}'
Producción
Java Python PHP JavaScript CSS SQL
Actualizando elemento de matriz
Podemos actualizar el elemento de la matriz asignando un nuevo valor a la matriz existente por su valor de índice. Cambiemos el elemento de la matriz en el índice 4 con un elemento 'Javatpoint'.
Ejemplo
#!/bin/bash #Script to update array element #Declaring the array declare -a example_array=( 'We''welcome''you''on''SSSIT' ) #Updating the Array Element example_array[4]=Javatpoint #Printig all the elements of the Array echo ${example_array[@]}
Producción
We welcome you on Javatpoint
Eliminar un elemento de una matriz
Si queremos eliminar el elemento del array, debemos conocer su índice o clave en caso de un array asociativo. Un elemento se puede eliminar usando el comando ' desarmado ' dominio:
unset ARRAY_NAME[index]
A continuación se muestra un ejemplo para proporcionarle una mejor comprensión de este concepto:
Ejemplo
#!/bin/bash #Script to delete the element from the array #Declaring the array declare -a example_array=( 'Java''Python''HTML''CSS''JavaScript' ) #Removing the element unset example_array[1] #Printing all the elements after deletion echo '${example_array[@]}'
Producción
Java HTML CSS JavaScript
Aquí, hemos creado una matriz simple que consta de cinco elementos, 'Java', 'Python', 'HTML', 'CSS' y 'JavaScript'. Luego eliminamos el elemento 'Python' de la matriz usando 'unset' y haciendo referencia a su índice. El índice del elemento 'Python' era '1', ya que las matrices bash comienzan desde 0. Si verificamos los índices de la matriz después de eliminar el elemento, podemos ver que falta el índice del elemento eliminado. Podemos verificar los índices agregando el siguiente comando al script:
echo ${!example_array[@]}
La salida se verá así:
0 2 3 4
Este concepto también funciona para las matrices asociativas.
Eliminar toda la matriz
Eliminar una matriz completa es una tarea muy sencilla. Se puede realizar pasando el nombre de la matriz como argumento al ' desarmado 'comando sin especificar el índice o clave.
Ejemplo
#!/bin/bash #Script to delete the entire Array #Declaring the Array declare -a example_array=( 'Java''Python''HTML''CSS''JavaScript' ) #Deleting Entire Array unset example_array #Printing the Array Elements echo ${!example_array[@]} #Printing the keys echo ${!example_array[@]}
Producción
No habrá resultados si intentamos imprimir el contenido del script anterior. Se devuelve un resultado vacío porque la matriz ya no existe.
Cortar elementos de matriz
Las matrices Bash también se pueden dividir desde un índice inicial determinado hasta el índice final.
Sistema operativo
Para dividir una matriz desde el índice inicial 'm' hasta el índice final 'n', podemos usar la siguiente sintaxis:
SLICED_ARRAY=(${ARRAY_NAME[@]:m:n}')
Ejemplo
#!/bin/bash #Script to slice Array Element from index 1 to index 3 #Declaring the Array example_array=( 'Java''Python''HTML''CSS''JavaScript' ) #Slicing the Array sliced_array=('${example_array[@]:1:3}') #Applying for loop to iterate over each element in Array for i in '${sliced_array[@]}' do echo $i done
Producción
${length};>