lunes, 3 de julio de 2017

Conversión de mayúsculas y minúsculas

Las versiones recientes de bash tiene soporte para conversión mayúsculas/minúsculas de cadenas. bash tiene cuatro expansiones de parámetros y dos opciones para el comando declare para soportarlo.

¿Y para qué sirve la conversión mayúsculas-minúsculas? Además del obvio valor estético, tiene un importante papel en programación. Consideremos el caso de una búsqueda en una base de datos. Imagina que un usuario ha introducido una cadena en un campo de entrada de datos que queremos buscar en una base de datos. Es posible que el usuario introduzca todo el valor en mayúsculas o todo en minúsculas o una combinación de ambas. Ciertamente, no queremos abarrotar nuestra base de datos con cada combinación posible de letras mayúsculas y minúsculas. ¿qué hacemos?

Una aproximación común a este problema es normalizar la entrada del usuario. Es decir, convertirla en una forma estandarizada antes de intentar la búsqueda en la base de datos. Podemos hacer esto convirtiendo todos los caracteres de la entrada del usuario a mayúsculas o minúsculas y asegurarnos de que las entradas en la base de datos están normalizadas de la misma forma.

El comando declare puede usarse para normalizar cadenas a mayúsculas o minúsculas. Usando declare, podemos forzar que una variable siempre contenga el formato deseado sin importar lo que tenga asignado:

#!/bin/bash

# ul-declare: demonstrate case conversion via declare

declare -u upper
declare -l lower

if [[ $1 ]]; then
    upper="$1"
    lower="$1"
    echo $upper
    echo $lower
fi

En el script anterior, usamos declare para crear dos variables, upper y lower. Asignamos el valor del primer argumento de la línea de comandos (parámetro posicional 1) a cada variable y luego las mostramos en pantalla:

[me@linuxbox ~]$ ul-declare aBc
ABC
abc

Como podemos ver, el argumento de línea de comandos ("aBc") ha sido normalizado.

Hay cuatro expansiones de parámetros que realizan la conversión mayúsculas/minúsculas:

Tabla 34-1: Expansión de parámetros para conversión mayúsculas/minúsculas
Formato Resultado
${parámetro,,} Expande el valor de parámetro a todo en minúsculas.
${parámetro,} Expande el valor de parámetro cambiando sólo el primer carácter a minúsculas.
${parámetro^^} Expande el valor de parámetro a todo en mayúsculas.
${parámetro^} Expande el valor de parámetro cambiando sólo el primer carácter a mayúsculas.

Aquí tenemos un script que demuestra estas expansiones:

#!/bin/bash

# ul-param - demonstrate case conversion via parameter expansion

if [[ $1 ]]; then
    echo ${1,,}
    echo ${1,}
    echo ${1^^}
    echo ${1^}
fi

Aquí está el script en acción:

[me@linuxbox ~]$ ul-param aBc
abc
aBc
ABC
ABc

De nuevo, procesamos el primer argumento de la línea de comandos y obtenemos las cuatro variantes soportadas por las expansiones de parámetros. Aunque este script usa el primer parámetro posicional, parámetro puede ser una cadena, una variable o una expresión.

No hay comentarios:

Publicar un comentario