![Cómo obtener roles de reacción en Discord con Carl Bot](https://trspos.com/wp-content/uploads/obtenga-roles-de-reaccion-en-discordia-con-carl-bot-400x267.jpg)
Bash Separar una Cadena en un Arreglo
![Bash Separar una Cadena en un Arreglo](https://trspos.com/wp-content/uploads/bash-de-matriz-de-cuerdas-divididas.jpg)
En algunos proyectos de bash, podemos encontrarnos con la necesidad de separar una cadena (string) en varios elementos para luego asignarlos a diferentes posiciones en un arreglo. Para ello, debemos utilizar algunas herramientas útiles de bash como el comando `read`, el cual nos permitirá tomar la cadena y separarla en múltiples piezas, y el delimitador que utilizará bash para separar los elemenos.
Uso de `Read` para Separar una Cadena
El comando `read` se utiliza para leer datos desde una entrada de usuario y almacenarlos en variables. Sin embargo, también podemos utilizar este comando para leer una cadena y fragmentarla en múltiples elementos que podamos incorporar en un arreglo. Para hacer esto, asignaremos la cadena a una variable y luego proporcionaremos al comando `read` un delimitador que utilizará para separar la cadena.
Por ejemplo, si queremos separar una cadena de texto utilizando el delimitador `:` podemos hacer lo siguiente:
cadena="elemento1:elemento2:elemento3:elemento4"
IFS=":"
read -ra arreglo <<< "$cadena"
En este caso, se está asignando la cadena "elemento1:elemento2:elemento3:elemento4" a la variable `cadena`. Luego, se define el delimitador para separar la cadena utilizando `IFS=":"`. Finalmente, se utiliza el comando `read` junto al argumento `-ra` para asignar las piezas separadas de la cadena a una nueva variable que será el arreglo `arreglo`.
Arreglo de Subcadenas
En ocasiones, podemos encontrarnos con que necesitamos separar una cadena completa en varias subcadenas que a su vez requerirán ser tratadas como arrays bien delineados. Para hacer esto, podemos utilizar el mismo delimitador `:` para separar tanto la cadena completa como las subcadenas.
cadena_completa="casa:perro, mesa:silla:ventana"
delimitador=":"
IFS=$delimitador
arreglo_completo=()
while read -ra arreglo_elementos; do
arreglo_completo+=("${arreglo_elementos[@]}")
done <<< "$cadena_completa"
En este caso, se está definiendo una cadena de texto que contiene varias subcadenas. Luego se define el delimitador para separar la cadena como `delimitador`. Posteriormente se asigna como delimitador la variable `delimitador` a la variable `IFS` y finalmente se defina un `array` vacío.
A pesar de que utilizamos el caracter de instrucción `while read`, no forzamos la generación de varias líneas ni de extraer elementos de la cadena. Una asignación es lo que necesitamos, los elementos extraídos se almacenan en `arreglo_elementos` y se agregan a `arreglo_completo` que se corrobora a través de un `echo` del arreglo en consecuencia al finalizar el ciclo.
Conclusión
Bash nos proporciona varias herramientas útiles para separar una cadena en múltiples elementos al asignarlos a un arreglo en bash. Ya sea utilizando un delimitador específico o mediante la separación de subcadenas, el comando `read` es fundamental en esta tarea.
Preguntas Frecuentes
¿Qué es bash?
Bash es un shell (intérprete de comandos) de Unix que nos permite interactuar con el sistema operativo a través de la línea de comandos.
¿Qué es un arreglo en bash?
Un arreglo es una estructura de datos que nos permite almacenar múltiples valores en una sola variable.
¿Cómo defino un arreglo en bash?
Se define el arreglo utilizando la siguiente sintaxis:
nombre_del_arreglo=(valor1 valor2 valor3)
¿Cómo accedo a un elemento específico de un arreglo en bash?
Para acceder a un elemento de un arreglo en bash, se utiliza la siguiente sintaxis:
echo ${nombre_del_arreglo[indice]}
Donde `indice` es el número que identifica la posición del elemento en el arreglo (comenzando desde 0).
Ejemplos
A continuación, mostramos algunos ejemplos sencillos de cómo podemos separar cadenas con delimitadores distintos:
cadena="manzanas:naranjas:peras"
IFS=":"
read -ra arreglo <<< "$cadena"
echo ${arreglo[0]} # resultado: manzanas
echo ${arreglo[1]} # resultado: naranjas
echo ${arreglo[2]} # resultado: peras
cadena_completa="hola|1,2,3|adios|4,5"
delimitador="|"
IFS=$delimintador
arreglo_completo=()
while read -ra arreglo_elementos; do
arreglo_completo+=("${arreglo_elementos[@]}")
done <<< "$cadena_completa"
echo ${arreglo_completo[0]} # resultado: hola 1,2,3
echo ${arreglo_completo[1]} # resultado: adios 4,5
Deja una respuesta