Devolver una matriz en Bash
- Sustitución de comandos
- Use la sustitución de comandos para devolver una matriz en Bash
-
Use
IFS
para devolver una matriz en Bash
Dado que Bash no maneja arreglos, devolver un arreglo puede ser un poco difícil. Sin embargo, es factible superar esta restricción utilizando una variable global o una solución alternativa de sustitución de comandos para devolver una matriz desde una función.
Este artículo cubrirá la sustitución de comandos, un método para devolver una matriz en bash sin necesidad de variables globales.
Sustitución de comandos
Para entender cómo funciona esto, primero debemos entender qué es la sustitución de comandos y cómo funciona en Bash.
La característica de Bash llamada sustitución de comando permite usar la salida de un comando en lugar del comando en sí. Esto se hace encerrando el comando en un par de acentos graves (``) o $()
, así:
echo "The current date is: `date`"
Producción :
The current date is: Fri Nov 29 16:14:23 PST 2022
El comando fecha
se ejecuta en el ejemplo anterior, y su salida se sustituye en lugar del comando en sí. Esto nos permite incrustar la salida de un comando directamente en una cadena, lo que puede ser útil en muchas situaciones.
Use la sustitución de comandos para devolver una matriz en Bash
Ahora, veamos cómo podemos usar la sustitución de comandos para devolver una matriz desde una función en Bash.
Primero, creemos una función llamada get_array
que devuelva una matriz de números del 1 al 10 y use la sustitución de comandos. Luego, llame a la función y almacene la salida en una variable, resultado
, que imprimiremos.
function get_array() {
local my_array=(1 2 3 4 5 6 7 8 9 10)
echo "${my_array[@]}"
}
result=$(get_array)
echo "The result is: $result"
Producción :
The result is: 1 2 3 4 5 6 7 8 9 10
En la función anterior, creamos una matriz llamada my_array
que contiene los números del 1 al 10. Luego usamos echo
para imprimir la matriz y encerrarla entre comillas para garantizar que los elementos de la matriz se conserven como una sola cadena. Luego, llamamos a la función get_array
y almacenamos su salida en la variable resultado
. Luego imprimimos el contenido de la variable resultado
, que debería ser la matriz de números del 1 al 10.
Use IFS
para devolver una matriz en Bash
Veamos ahora cómo podemos obtener los elementos de la matriz. Dado que los elementos de la matriz se devuelven como una sola cadena, necesitamos usar la variable IFS
(separador de campo interno) para dividir la cadena en elementos individuales.
La variable IFS
controla cómo bash divide una cadena en palabras o tokens. De forma predeterminada, IFS
se establece en espacio
, tabulador
y nueva línea
, lo que significa que bash dividirá una cadena en palabras en cualquiera de estos caracteres.
Para dividir la cadena devuelta por la función get_array
en elementos individuales, necesitamos establecer IFS
en un carácter de espacio:
IFS=' '
result=$(get_array)
result_array=($result)
for i in "${!result_array[@]}"; do
echo "Element $i: ${result_array[$i]}"
done
Producción :
Element 0: 1
Element 1: 2
Element 2: 3
Element 3: 4
Element 4: 5
Element 5: 6
Element 6: 7
Element 7: 8
Element 8: 9
Element 9: 10
En el código anterior, configuramos IFS
en un carácter de espacio, lo que nos permite dividir la cadena devuelta por la función get_array
en elementos individuales. Luego almacenamos el resultado en la variable result_array
y usamos un ciclo for
para imprimir los elementos de la matriz.
Veamos ahora cómo este método puede devolver una matriz de cadenas en lugar de una matriz de números.
Primero, modifiquemos la función get_array
para devolver una matriz de cadenas:
function get_array() {
local my_array=("one" "two" "three" "four" "five" "six" "seven" "eight" "nine" "ten")
# Return the array using the command substitution
echo "${my_array[@]}"
}
En la función anterior, creamos una matriz llamada mi_matriz
que contiene las cadenas uno
a diez
. Luego usamos echo
para imprimir la matriz y encerrarla entre comillas para garantizar que los elementos de la matriz se conserven como una sola cadena.
Ahora examinemos cómo podemos utilizar la función get_array
para devolver la matriz de cadenas:
IFS=' '
result=$(get_array)
result_array=($result)
for i in "${!result_array[@]}"; do
echo "Element $i: ${result_array[$i]}"
done
Producción :
Element 0: one
Element 1: two
Element 2: three
Element 3: four
Element 4: five
Element 5: six
Element 6: seven
Element 7: eight
Element 8: nine
Element 9: ten
En el código anterior, llamamos a la función get_array
y almacenamos su salida en la variable resultado
. Luego dividimos la cadena en elementos individuales y los almacenamos en la variable result_array
.
Finalmente, usamos un bucle for
para imprimir los elementos de la matriz.
En conclusión, devolver una matriz en bash puede ser complicado, ya que bash no admite matrices. Sin embargo, se puede usar un método conocido como sustitución de comandos para tener una función.
Esto implica encerrar la matriz entre comillas y usar echo
para imprimirla y luego dividir la cadena resultante en elementos individuales usando la variable IFS
.
Olorunfemi is a lover of technology and computers. In addition, I write technology and coding content for developers and hobbyists. When not working, I learn to design, among other things.
LinkedIn