Simplificando tu código BASH: de bloques "if" a soluciones minimalistas.
Cuando estamos aprendiendo a programar en "shell", tendemos a usar estructuras largas para tareas simples.
Vamos a ver cómo transformar un bloque de código común en una solución que si hablamos de programas de código muy extenso, puede llegar a ser mucho más profesional, y también de cómo gestionar archivos de configuración de forma más "limpia".
El desafío de las variables vacías.
Imaginemos que nuestro script necesita saber el nombre del usuario. Si por alguna razón no logra saberlo, queremos que guarde un mensaje "por omisión". Normalmente, escribiríamos algo así, lo cual estaría muy bien:
if [[ -z "$usuario" ]];then
usuario="Desconocido"
fi
Esto funcionará, pero BASH tiene un operador de expansión conocido como "parámetro por defecto" que hace exactamente lo mismo en una sola línea, llenando él mismo el contenido de la variable sin tener que dar tanta vuelta nosotros a nivel código, y sin pedirle a él que de tanta vuelta interna:
usuario="${usuario:-Desconocido}"
¿Cómo se interpreta esto?
Las llaves "${ }" le dicen a BASH que preste atención al estado de la variable.
El símbolo ":-" actúa como una especie de "plan B" en caso de que la variable "usuario", por algún motivo, esté vacía o no haya sido inicializada, y entonces poder utilizar el texto que sigue.
Si ya tiene un valor, no toca nada. Es ideal para configurar valores iniciales de manera automatizada, sin tener que "llenar" el script de condiciones o igualaciones.
Va otro ejemplo, para terminar de redondear el tema.
Supongamos que tu script permite elegir un color de fondo, pero que si el usuario no elige ninguno, el script tenga que utilizar uno obligatoriamente.
La forma más típica:
if [[ -z "$col_fondo" ]];then
col_fondo="azul"
fi
La forma que estamos estudiando en este artículo:
col_fondo="${col_fondo:-azul}"
En este caso, el "plan B" asegura que el script siempre tenga un color para referenciarse y no fallar, sin importar si el usuario lo omitió deliberadamente o se olvidó de configurarlo con anterioridad a la ejecución de dicha línea.

0 Comentarios:
Publicar un comentario