Convertir una cadena en array en Shell Script
En ocasiones nos vamos a encontrar con la necesidad de dividir una cadena en partes para crear un array para poder recorrerlo y procesar individualmente cada una de sus partes. Lo podemos hacer con:
IFS, que es la variable de entorno Internal Field Separator o, en español, separador de campos internos, que sirve para indicar el separador que queramos usar para dividir en subcadenas. Si el separador es el signo de dos puntos, usaremos IFS=’:’.
read que es el comando que permite leer una línea de la salida estándar y dividirla en campos. En este caso, no leerá de la salida estándar sino que le indicaremos que tome la entrada de una cadena con <<<. Usaremos los siguientes modificadores:
- -a: divide en un array.
- -r: evita que las barras invertidas escapen caracteres.
Un nombre para el array y una cadena de texto. Podemos asignar como nombre del array el mismo nombre de la cadena de texto.
Ejemplo práctico
Supongamos que queremos dividir una cadena de texto formada por distintas partes y cuyo separador es el signo de dos puntos, como podría ser la salida de echo $PATH
y luego recorrer cada una de esas partes:
#!/bin/bash paths=$(echo $PATH) IFS=':' read -r -a paths <<< "$paths" for item in "${paths[@]}" do echo $item done
Nos devolverá el listado de los directorios cada uno en una línea:
/home/usuario/.local/bin /usr/local/sbin /usr/local/bin /usr/sbin /usr/bin /sbin /bin /usr/games /usr/local/games /snap/bin