Día 33 Expanciones
-
como ya vimos el comando
$((2 + 2))es una expanción, esto significa que bash no lee directamente el comando, si no que resuelve antes lo que esta dentro de la expanción y luego dicho resultado es que el toma -
Expanciones de llaves:
-
Las expanciones por llaves son muy utiles, nos permiten generar cadenas de caracteres con distintas convinaciones, ejemplo:
-
echo {a,b,c}{1,2,3} -
esto nos devolveria: a1 a2 a3 b1 b2 b3 c1 c2 c3
-
en esencia se podria decir que genera un producto cartesiano de los elementos separados por comas
-
ejemplo de uso:
-
mkdir {grupoA,grupoB,grupoC}{01,02,03} -
rmdir {grupoA,grupoB,grupoC}{01,02,03}
-
-
Expanciones Aritmeticas:
-
Las expanciones aritmeticas, son basicamente operaciones aritmeticas de toda la vida, como ya dijimos para que bash no lea el comando directamente si no que primero resuelva una operación y luego dicho resultado sea el que nos devuelva se usa la expanción
$((1 + 2))si simplemente escribimos1 + 10((1 + 2))bash lo interpretara como texto simpelmente -
Ejemplo de uso:
-
echo $((1 + 2))
-
-
División de palabras:
-
La división de palabras hace justo lo que su nombre indica, para entender mejor esto pongamos un ejemplo:
lista="manzana,pera,fresa"si vemos lo que hay dentro de la lista nos devolvera todos los valores juntos, las comas no serviran como separadores, seran parte del texto ejemplo: -
lista="manzanas,peras,fresas" printf $lista ~$ manzanas,peras,fresa -
Para que las comas sirvan como separadores hacemos uso de una variable interna de bash llamada IFS (Internal Field Separador) esta variable solo almecena dentro un espacio o una tabulación, de esta forma si le asignamos otro signo como por ejemplo una coma esa coma funcionara como separador ejemplo:
-
IFS="," ~$ printf $lista -
Expansión de nombre de ficheros:
-
Este tipo de expansión hace uso de (*) ([]) (?) para tratar las palabras como patrones, ejemplo:
-
$ ls fichero1 fichero11 fichero2 fichero3 LÉEME script.sh $ ls fichero? fichero1 fichero2 fichero3 $ ls *[1-2] fichero1 fichero11 fichero2 $ ls *[^1-2] fichero3 LEEME script.sh $ ls s* script.sh
-