Aparte de los caracteres que se pueden teclear mediante un teclado, hay
muchos otros que se pueden mostrar por la pantalla. He creado un script
que permite comprobar qué tiene disponible el tipo que esté usando. El
comando principal que hay que usar para utilizar estos caracteres es
echo -e. La opción -e le indica a echo que habilite la
interpretación de caracteres espacados mediante contrabarra. Lo que
aparezca a partir de un 200-400 octal será muy diferente con un tipo
VGA de lo que aparezca con un tipo estándar linux. Queda avisado de que
algunas de estas secuencias de escape tienen extraños efectos en el
terminal, y no he intentado evitarlos. Los caracteres de dibujos de líneas
y bloques (que nos resultan tan familiares a los usuarios de Word Perfect)
utilizados masivamente en el proyecto Bashprompt están entre el 260 y 337
octal.
#!/bin/bash
# Script: escgen
function usage {
echo -e "\033[1;34mescgen\033[0m <valor_inferior> [<valor_superior>]"
echo " Generador de secuencias de escape octales: imprime todas las"
echo " secuencias de escape contenidas entre los valores menor y"
echo " mayor. Si no se proporciona el segundo valor, se imprimen"
echo " 8 caracteres."
echo " 1998 - Giles Orr, sin garantía."
exit 1
}
if [ "$#" -eq "0" ]
then
echo -e "\033[1;31mPor favor incluya uno o dos valores.\033[0m"
usage
fi
let lower_val=${1}
if [ "$#" -eq "1" ]
then
# Si no hay dos valores, sacar 8 caracteres
upper_val=$(echo -e "obase=8 \n ibase=8 \n $lower_val+10 \n quit" | bc)
else
let upper_val=${2}
fi
if [ "$#" -gt "2" ]
then
echo -e "\033[1;31mPor favor, incluya dos valores.\033[0m"
echo
usage
fi
if [ "${lower_val}" -gt "${upper_val}" ]
then
echo -e "\033[1;31m${lower_val} es mayor que ${upper_val}."
echo
usage
fi
if [ "${upper_val}" -gt "777" ]
then
echo -e "\033[1;31mLos valores no pueden superar 777.\033[0m"
echo
usage
fi
let i=$lower_val
let line_count=1
let limit=$upper_val
while [ "$i" -lt "$limit" ]
do
octal_escape="\\$i"
echo -en "$i:'$octal_escape' "
if [ "$line_count" -gt "7" ]
then
echo
# Put a hard return in.
let line_count=0
fi
let i=$(echo -e "obase=8 \n ibase=8 \n $i+1 \n quit" | bc)
let line_count=$line_count+1
done
echo
También se puede usar xfd para mostrar todos los caracteres de un
tipo X, mediante el comando xfd -fn <tipo>. Pinchando sobre un
caracter determinado se puede obtener mucha información sobre él,
incluyendo su valor octal. El script de arriba puede resultar útil en la
consola, y en el caso de que no se esté seguro acerca del nombre del tipo.