Apuntes mientras aprendo sobre software y computadoras.

programación

Expansión de parámetros e índice en bash

Este texto es un anexo de la:

“Guía mínima para empezar a programar en Bash”

De todas formas se puede leer por separado . El tema va a ser la expansión de parámetros, la idea de índice y algunas formas de manipular los valores de las variables.

Todo lo que sigue a continuación se puede comprobar usando los ejemplos en la shell bash.

Manipular el contenido de las variables

Según entiendo, todo este tema se resumen a eso: manipular el texto o valor que guarda una variable.

Por ejemplo, puedo crear una variable asignándole un valor:

insecto=ABEJA

La variable insecto guarda en su interior el nombre ABEJA. Si utilizo el comando “echo” sobre la variable, puedo recuperar su valor.

echo $insecto 
ABEJA

Intercambiar mayúsculas y minúsculas

Primero que nada puedo modificar la forma en que el valor de un parámetro es representado.

Intercambiar entre mayúsculas y minúsculas puede resultar beneficioso si necesito darle formato rápido a un texto. No es un mal truco para tener a mano… aunque en un primer momento no se me ocurran muchos usos para esto.

Voy a recuperar la variable anterior:

insecto=ABEJA

Lo que voy a hacer ahora es encerrar la variable entre corchetes {} al momento de llamarla. En inglés estos corchetes se conocen como curly brackets.

Yo simplemente los conozco como corchetes, pero a partir de ahora voy a llamarlos corchetes redondeados para no confundirlos con los corchetes rectos. Seguramente tienen un nombre oficial, pero este nombre ¿provisorio? va a servir para salir del paso.

Al agregar estos corchetes redondeados cuando invoco la variable (ademas del signo $ que ya estaba usando), voy a poder acceder a los parámetros de expansión en Bash.

Por ejemplo, digamos que me interesa convertir toda la palabra ABEJA a letras minúsculas.

Entonces:

echo ${insecto,,} 
abeja

Lo que hago es agregar ,, (dos comas) luego de la variable.

Algo realmente importante es que el valor original de la variable no fue alterado, simplemente fue representado de manera distinta.

Puedo volver a invocar la variable retirando las dos comas, y el parámetro original sigue igual. Lo que significa que puedo hacer modificaciones sin miedo a perder o borrar el dato original.

echo ${insecto} 
ABEJA

Pero esto de las minúsculas tiene otro variante. Si utilizo solamente una coma en lugar de dos, entonces solo la primera letra es modificada.

echo ${insecto,}
aBEJA

Ahora solo por el gusto de completar la idea, voy a probar pasar un texto de minúsculas a mayúsculas. El concepto es el mismo. Pero en lugar de utilizar comas utilizo el símbolo caret o “carrot”, porque suena a zanahoria en inglés.

¿Cuál es este símbolo? Es ˄ y se parece a una flecha apuntando hacia arriba.

¿Cómo encontrar este símbolo en el teclado? Realmente no tengo idea. Cuando lo necesito por lo general lo que hago es buscarlo como un carácter especial en LibreOffice Writer (aparece como circumflex accent), y luego lo pego en la terminal.

Igual que antes, un solo símbolo caret convierte la primera letra en mayúscula. Dos símbolos caret convierten todo en mayúsculas.

Visto en un ejemplo rápido:

 insecto=abeja
echo ${insecto^^}
ABEJA

Conocer el largo de una variable

Otra cosa que puedo obtener es el largo de una variable. Esto me permite conocer por cuantos caracteres esta integrada.

Lo hago de esta forma, retengamos nuestra variable “insecto=abeja” otra vez:

echo ${#insecto} 
5

Lo que hice fue poner el símbolo numeral al expandir la variable. En este momento bash me entrega un número, que me cuenta la cantidad de caracteres en la palabra abeja.

El índice y la expansión de parámetros

La expansión de parámetros me deja trabajar con una sola parte de los datos que guarda la variable.

Dividir en porciones o hacer “slicing” me permite tomar una sección de la variable. Algo valioso cuando solamente necesito una parte de la información… aunque tampoco se me ocurran mejores usos para esta herramienta ahora mismo.

Pero antes, es una buena oportunidad para traer la idea de índice a este apunte.

Tengo por ejemplo la palabra abeja. Si me olvido de su sentido y me quedo solamente con la palabra, me encuentro con en una serie de letras individuales puestas en orden.

Por lo general una pieza de texto se conoce como una “string”, que en ingles significa hilo. Una palabra es como un hilo de palabras consecutivas. Lo mismo una oración, un párrafo o un texto completo.

Cada letra (o elemento) en una string tiene su propio número dentro de la secuencia. Esto se conoce como el index o índice.

Este índice no empieza desde uno, comienza con cero y luego se va incrementando en uno por cada elemento de la string.

Por ejemplo en la palabra abeja, si la pienso asociada a la idea de índice me queda:

a (0) b (1) e (2) j (3) a (4)

Ocurre lo mismo al trabajar con números, siempre que sean parte de una string. Dentro de una serie de números, el primer elemento también corresponde al índice cero.

De este modo, por ejemplo quiero solamente los caracteres que van entre el índice 1 y el 3 incluidos hago:

echo ${insecto:1:3} 
bej

Y si quisiéramos ver solamente el índice 1 puedo probar con algo como:

echo ${insecto:1:1} 
b

Básicamente, lo importante es recordar que al utilizar el signo $ y los corchetes redondeados {} se puede acceder a nuevas opciones para trabajar con las variables.

Conclusión

Una vez más, este es un pequeño resumen que sirve de anexo para otro más complejo.

Los temas que revisamos hoy sirven para ampliar nuestros conocimientos de programación de bash, pero no es necesario memorizarlos ni nada por el estilo. Alcanza con saber de su existencia en caso de necesitarlos.

Cualquier error que encuentres en el texto, no dejes de avisarme para que pueda corregirlo.

La seguimos en el próximo apunte.

Leave a Reply