Expansión de llaves: conociendo a Bash

Bash es la shell configurada por defecto en la mayoría (sino en todas) las distribuciones modernas de Linux. Para conocer mejor a Bash, compartiremos una serie de posts sobre algunos conceptos sumamente útiles sobre esta shell. En esta oportunidad, hablaremos sobre la expansión de llaves. Este tema no nos será del todo desconocido, ya que lo utilizamos en nuestro post anterior.

Expansión de llaves en Bash

Por definición, la expansión de llaves es un método mediante el que se pueden generar cadenas de texto arbitrarias. Para ilustrar este concepto, veamos la Fig. 1:

Ejemplos de expansión de llaves en Bash
Figura 1 – Ejemplos de expansión de llaves en Bash

A fin de realizar la expansión de llaves, necesitamos disponer de 1) un string a la que llamaremos antes, 2) otro al que llamaremos después, y 3) una lista o expresión secuencial entre llaves. Estrictamente hablando, para ilustrar este concepto solamente necesitamos el tercer componente. Sin embargo, los otros dos nos sirven para generar un string fijo al principio y al final de cada cadena generada por la expansión.

Análisis de los ejemplos

En el Ejemplo 1 encontramos una lista de números del 1 al 5 separados por comas. Al realizar la expansión de llaves, Bash generará 5 strings. Cada una de ellas comenzará con archivo seguido por el número correspondiente, y finalizando por .txt.

El siguiente caso, que mostramos en Ejemplo 2, muestra otra alternativa. Para generar secuencias, podemos recurrir a la notación .. entre el comienzo y el fin de las mismas. Opcionalmente, podemos indicar el «salto» que se desea tener entre un elemento y el siguiente.

Veamos los ejemplos anteriores llevados a la línea de comandos, cuyos resultados observamos en la Fig. 2:

echo archivo{1,2,3,4,5}.txt
echo archivo{2..10..2}.ba
Desarrollo de los ejemplos de expansión de llaves en Bash
Figura 2 – Desarrollo de los ejemplos de expansión de llaves en Bash

¿Para qué nos sirve la expansión de llaves? Uno de los usos posibles es el que mostramos en el post anterior: generar varios archivos vacíos con un solo comando. También podemos crear una gran cantidad de directorios en un solo paso:

mkdir dir_{a..f}

Espero que este post les haya resultado útil. ¡Nos leemos en el próximo!