Cuando le ingresamos una orden a nuestro interprete de comandos (BASH en la mayoría de distribuciones GNU/Linux), antes de ejecutarse dicha orden el interprete realiza una acción denominada expansión, usando algunos metacaracteres (~,$,{},etc) que BASH interpreta de manera especial para generar así poderosas e interesantes formas de usar nuestro interprete de comandos.

Tenemos varios tipos de expansiones que veremos a continuación como los son las expansiones de: parámetros, expansiones aritméticas, subtitución de comandos, entre otras. El propósito de esta entrada es dar una breve introducción a cada una de ellas (al menos las más importantes) para ampliar nuestros conocimientos en el manejo de la consola de Linux y entender un poco más de todo su potencial.

Expansión de Tilde (Tilde expansion) ~

Este tipo de expansión es una de las más sencillas, para implementarla debemos hacer uso del siguiente caracter ~, este hace referencia al directorio home de algún usuario en especial.

$ echo ~

Lo anterior imprimirá “/home/usuarioActual”. En este punto debemos hacer una pausa y entender que pasa exactamente cuando presionamos enter en el comando anterior, BASH interpreta el metacaracter ~ y lo cambia por el directorio home del usuario actual, osea que se sería lo mismo si ejecutamos el comando:

$ echo /home/usuarioActual

Este comportamiento se aplica para todas las expansiones que realiza BASH. usuarioActual será obviamente el usuario con el que estemos logueados en el momento, pero también podemos hacer referencia a otros usuarios de la siguiente manera:

$ echo ~otroUsuario

La salida será muy similar: “/home/otroUsuario”, pero debemos tener en cuenta que otroUsuario debe ser un usuario válido, ya que de lo contrario BASH no hará ninguna expansión sobre la tilde y en este caso en particular el comando echo imprime la cadena “~otroUsuario”. Para terminar la expasión de tilde debemos mencionar que también que se puede usar de las siguientes dos maneras:

  • ~+ Hace referencia al directorio actual.
  • ~- Hace referencia al directorio anterior, no confundir con el directorio padre (..)

Expansión de llaves (Brace expansion) { }

Esta es una de las expansiones más importantes, con ella podemos crear rápidamente múltiples palabras. Si tenemos {c,t,p,n}asa BASH lo expandirá a cuatro palabras. por ejemplo si lo usamos con el comando echo:

$ echo {c,t,p,n}asa

Lo anterior imprime cuatro palabras: “casa tasa pasa nasa”, es como si le hubieramos pasado como parametros esas cuatro palabras al comando echo. Otra forma de usuarlo es para armar secuencias: {a..z} que será equivalente a el abecedario en minúsculas. otros ejemplos: {A..Z}, {1..10}. Vamos hacer uso de esta última característica para descargar un conjunto de imágenes mediante wget. Tira-Ecol es un comic que sigo a menudo, en algún momento quise tener una copia de todas las tiras publicadas y no hacerlo “a mano” haciendo click derecho sobre la imagen y guardándola. Cuando abrimos su página inicial, por defecto nos abre el último comic publicado, si somos un poco curiosos y vemos la dirección de la imagen de la tira publicada es la siguiente (al día de hoy): http://www.tiraecol.net/modules/comic/cache/images/tiraecol-399.png. Vemos que son publicadas con un número consecutivo, ya que si visitamos el link: http://www.tiraecol.net/modules/comic/cache/images/tiraecol-398.png abriremos la tira anterior y así sucesivamente. Podemos ver entonces que el link de todas las tiras es prácticamente el mismo a excepción de dicho número concecutivo. Es aquí donde usamos la expansión de llaves junto con el comando wget.

$ wget http://www.tiraecol.net/modules/comic/cache/images/tiraecol-{1..399}.png

De esta manera le pasamos todas las tiras como parámetros a wget para que realiace la descarga, BASH los expandirá de la siguiente manera:

http://www.tiraecol.net/modules/comic/cache/images/tiraecol-1.png
http://www.tiraecol.net/modules/comic/cache/images/tiraecol-2.png
...
http://www.tiraecol.net/modules/comic/cache/images/tiraecol-398.png
http://www.tiraecol.net/modules/comic/cache/images/tiraecol-399.png

NOTA: no todas las descargas funcionarán, ya que las primeras tiras fueron publicadas algunas con formato jpeg y otras con gif, como una de mis tiras favoritas, la número 10: http://www.tiraecol.net/modules/comic/cache/images/tiraecol-10.gif

En este punto ya podemos ver todo el potencial que tiene la expansión en BASH, el límite para el uso de esta característica realmente será nuestra imaginación. Queda para otra ocasión los otros tipos de expansiones de las cuales podemos hacer uso.