#!/bin/bash [ -z "$1" ] && echo "Usage: ${0##*/} string" && exit 1 string="$*" fg_range=( 34 40 46 82 86 123 87 81 51 45 39 33 27 ) color_string='' for (( i=0 ; i <= "${#string}" ; i++ )); do color_string="${color_string}\e[38;5;${fg_range[$i]}m${string:${i}:1}" done color_string="${color_string}\e[0;0m" echo -e "colored string: '${color_string}'" echo "raw ansi string: '${color_string}'"