Viernes de Terminal: Bash [Expansión de Llaves]

Antes que nada quisiera disculparme, ya que el viernes pasado no pude escribir el post así que hoy agregare un extra para reponer el día perdido. 

Brace Expansion

En Español expansión de llaves me parece que es una función inspirada por C Shell, esta genera combinaciones entre los caracteres que se ingresen dentro de las llaves, el orden que usa es de izquierda a derecha. No tiene nada de complicado pero es una opción que nos será muy útil en nuestros recorridos por GNU/Linux.

Ejemplo:

$ echo a{1,2,3}
a1 a2 a3

Cuando se usa con comas (,) genera combinaciones entre el valor a y los valores dentro de las llaves. Si no existiera un valor fuera de las llaves solo mostraría una vez cada valor que contiene la llave.

$ echo {a,b,c}
a b c

No es nada complejo su uso, existen otros ejemplo mas comunes como crear muchos directorios en una carpeta

$ mkdir ~/Trabajos/{uno,dos,tres,cuatro,cinco}

Esto crea cinco carpetas dentro de la carpeta trabajos, es como ingresar un comando a la vez. Creando los 5 directorios.

Existen expansión por dos puntos .. esto crea una serie de números o caracteres que van de el valor inicial a el valor final, no se deben usar números con letras.

$ echo {1..5} #Correcto
1 2 3 4 5

$ echo {a..f} #Correcto
a b c d f

$ echo {a..5} #Incorrecto
{a..5}

#Creo que nunca me acostumbrare a este color azul en la letra

Podemos ahorrar tiempo al crear un ciclo for

#En lugar de escribir
$ for (( i=1; i<=5; i++ )); do echo "Mi numero $i"; done
Mi numero 1
Mi numero 2
Mi numero 3
Mi numero 4
Mi numero 5

#Ahorramos código usando brace expansion.
$ for i in {1..5}; do echo "Mi numero $i; done
Mi numero 1
Mi numero 2
Mi numero 3
Mi numero 4
Mi numero 5

#Claro que es valido usar aunque la salida es diferente.
$ echo "Mi numero "{1..5}
Mi numero 1 Mi numero 2 Mi numero 3 Mi numero 4 Mi numero 5

Bueno creo que ya quedo claro el concepto haha ahora solo comentare que es combinable y anidado ¿A que me refiero con esto?
Con combinable a que podemos juntar una o mas llaves

$ echo {a..c}{1..3}
a1 a2 a3 b1 b2 b3 c1 c2 c3

Con anidado como muchos imaginaran puedes usar llaves de expansion dentro de llaves de expansión

$ echo {a,c{1..3},d}
a c1 c2 c3 d

Y por ultimo desde Bash 4 es posible incrementar los valores.

$echo {0..20..2}
0 2 4 6 8 10 12 14 16 18 20

Esto es todo por hoy, así que gracias por leerme gente 

Extra

Como crear un bin local

Cuando digo un bin local me refiero a un directorio en el que tengamos scripts propios y sea posibles ejecutarlos como un simple comando…

Logar esto es relativamente fácil, lo primero que se necesita hacer es crear un directorio donde guardaremos los scripts.

mkdir ~/.bin #En este ejemplo estará oculta

Ahora tenemos nuestra carpeta para guardar los script pero no funcionara hasta que agregamos la ruta de el nuevo .bin a $PATH
Para esto se edita el archivo bash_profile, y se agrega la linea.

export PATH=$PATH:~/.bin

Y listo eso es suficiente para crear un bin local, claro que pedirá permisos de root si es necesario para un ejemplo escribimos un script rápido.

#!/bin/bash

echo "Hola $1, ¿Como estas?"

Guardarlo con el nombre de hola
A el script se le da permiso de ejecución y solo bastara llamarlo desde la terminal

$ hola wada
#Esto mostrara el mensaje
Hola wada, ¿Como estas?

Así con este truco rápido podrás ejecutar mas rápidos tus scripts

Eso es todo por hoy gente que estén bien 
P.D. Disculpen los errores si los hay los ojos ya se me cierran hahaha 