Dividir cadena en un array en Bash
-
Uso del comando
read
para dividir una cadena en un array en Bash -
Uso del comando
tr
para dividir una cadena en un array en Bash - Uso de la expansión de parámetros para dividir una 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
Artículo relacionado - Bash String
- Bash Eliminar nueva línea de la cadena
- Convertir cadena a entero en Bash
- Dividir cadena en variables en Bash
- Eliminar el primer carácter de la cadena en Bash
- Obtener la longitud de la cadena en Bash
- Operador de comparación de cadenas en Bash