Dividir cadena en un array en Bash

Fumbani Banda 30 enero 2023
  1. Uso del comando read para dividir una cadena en un array en Bash
  2. Uso del comando tr para dividir una cadena en un array en Bash
  3. Uso de la expansión de parámetros para dividir una cadena en un array en Bash
Dividir cadena en un array en Bash

Este tutorial explica cómo dividir una cadena en un array en bash usando el comando read, el comando tr y la expansión de parámetros.

Uso del comando read para dividir una cadena en un array en Bash

El comando read es un comando integrado en los sistemas Linux.

Se utiliza para leer el contenido de una línea en una variable. También divide las palabras de una cadena que se asigna a una variable de shell.

En el siguiente script, la cadena variable $addrs se pasa al comando read. El IFS establece el delimitador que actúa como un límite de palabra en la variable de cadena.

Esto significa que - es la palabra límite en nuestro caso. La opción -a le dice al comando read que almacene las palabras que se han dividido en un array, mientras que la opción -r le dice al comando read que trate los caracteres de escape como son y no los interprete.

Las palabras que se han dividido se almacenan en la variable ip_array. Para acceder a los elementos individuales dentro del array, usamos esta sintaxis, ${array name[index]}.

En el siguiente script, ip_array es el nombre del array y 0 es el índice que indica el primer elemento del array.

#!/usr/bin/env bash

addrs="192.168.8.1,192.168.8.2,192.168.8.3,192.168.8.4"

IFS=',' read -ra ip_array <<< "$addrs"

printf "${ip_array[0]}\n"

La salida muestra el primer elemento del array.

192.168.8.1

El siguiente script agrega un bucle for que recorre el array e imprime todos los elementos usando el comando echo.

#!/usr/bin/env bash

addrs="192.168.8.1,192.168.8.2,192.168.8.3,192.168.8.4"

IFS=',' read -r -a ip_array <<< "$addrs"

for ip in "${ip_array[@]}"
do
    echo "$ip"
done

La siguiente salida muestra todos los elementos que están dentro del array.

192.168.8.1
192.168.8.2
192.168.8.3
192.168.8.4

Uso del comando tr para dividir una cadena en un array en Bash

El comando tr es una forma abreviada de translate.

Traduce, elimina y comprime caracteres de la entrada estándar y escribe los resultados en la salida estándar. Es un comando útil para manipular texto en la línea de comandos o en un script bash.

Se puede utilizar para eliminar caracteres repetidos, convertir minúsculas a mayúsculas y reemplazar caracteres.

En el script de bash a continuación, el comando echo canaliza la variable de cadena, $addrs, al comando tr, que divide la variable de cadena en un delimitador, ;. Una vez dividida la cadena, los valores se asignan a el array ip_addrs.

el bucle for itera a través del array $ip_addrs e imprime todos los valores usando el comando printf.

#!/bin/bash

addrs="192.168.8.1,192.168.8.2,192.168.8.3,192.168.8.4"

ip_addrs=(`echo $addrs | tr ',' ' '`)

for ip in "${ip_addrs[@]}"
do
    printf "$ip\n"
done

La siguiente salida muestra todos los elementos que están dentro del array.

192.168.8.1
192.168.8.2
192.168.8.3
192.168.8.4

Uso de la expansión de parámetros para dividir una cadena en un array en Bash

El siguiente script usa la expansión de parámetros para buscar y reemplazar caracteres.

La sintaxis utilizada para la expansión de parámetros es ${variable//search/replace}. Busca un patrón que coincida con search en la variable y lo reemplaza por replace.

En nuestro caso, el script busca el patrón , y lo reemplaza con un espacio en blanco en la variable de cadena $addrs. Los paréntesis alrededor de $addrs se utilizan para definir un array de la nueva cadena, llamada ip_array.

Usamos el bucle for para iterar sobre todos los elementos del ip_array y mostrarlos usando el comando echo.

#!/bin/bash

addrs="192.168.8.1,192.168.8.2,192.168.8.3,192.168.8.4"

set -f
ip_array=(${addrs//,/ })

for ip in "${!ip_array[@]}"
do
    echo "[$ip] ${ip_array[ip]}"
done

La siguiente salida muestra todos los elementos que están dentro del array.

[0] 192.168.8.1
[1] 192.168.8.2
[2] 192.168.8.3
[3] 192.168.8.4
Fumbani Banda avatar Fumbani Banda avatar

Fumbani is a tech enthusiast. He enjoys writing on Linux and Python as well as contributing to open-source projects.

LinkedIn GitHub

Artículo relacionado - Bash String

Artículo relacionado - Bash Array