printf não entende \e ; você precisa usar 3 . Observe que printf também é bash builtin; esse tem extensões GNU incluindo \e , mas a menos que você solicite especificamente seu script seja executado por /bin/bash você normalmente obterá o POSIX.