Special Characters: Octal Escape Sequences

Bash Prompt HOWTO:
Prev |  | Next

# Chapter 7. Special Characters: Octal Escape Sequences

Outside of the characters that you can type on your keyboard, there are a lot of other characters you can print on your screen. I've created a script to allow you to check out what the font you're using has available for you. The main command you need to use to utilize these characters is "echo -e". The "-e" switch tells echo to enable interpretation of backslash-escaped characters. What you see when you look at octal 200-400 will be very different with a VGA font from what you will see with a standard Linux font. Be warned that some of these escape sequences have odd effects on your terminal, and I haven't tried to prevent them from doing whatever they do. The linedraw and block characters that are used heavily by the Bashprompt project are between octal 260 and 337 in the VGA fonts.

    #!/bin/bash

    #   Script: escgen

    function usage {
       echo -e "\033[1;34mescgen\033[0m <lower_octal_value> [<higher_octal_value>]"
       echo "   Octal escape sequence generator: print all octal escape sequences"
       echo "   between the lower value and the upper value.  If a second value"
       echo "   isn't supplied, print eight characters."
       echo "   1998 - Giles Orr, no warranty."
       exit 1
    }

    if [ "$#" -eq "0" ]
    then
       echo -e "\033[1;31mPlease supply one or two values.\033[0m"
       usage
    fi
    let lower_val=${1}
    if [ "$#" -eq "1" ]
    then
       #   If they don't supply a closing value, give them eight characters.
       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;31mPlease supply two values.\033[0m"
       echo
       usage
    fi
    if [ "${lower_val}" -gt "${upper_val}" ]
    then
       echo -e "\033[1;31m${lower_val} is larger than ${upper_val}."
       echo
       usage
    fi
    if [ "${upper_val}" -gt "777" ]
       then
       echo -e "\033[1;31mValues cannot exceed 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

You can also use xfd to display all the characters in an X font, with the command xfd -fn <fontname>. Clicking on any given character will give you lots of information about that character, including its octal value. The script given above will be useful on the console, and if you aren't sure of the current font name.

Prev | Home | Next
Colours and Cursor Movement With tput |  | The Bash Prompt Package