Shell – Escape Sequences with echo -e in Different Shells

echoescape-charactersshell

I just noticed that it seems like the flag -e does not exist for the echo command in my shell on Linux.
Is this just a messed up setting or is it "normal"?

Some code as an example:

#!/bin/sh
echo -e "\e[3;12r\e[3H"

Prints:

-e \e[3;12r\e[3H

This worked before! I guess some stty commands went terribly wrong and now it does not work anymore. Somebody suggested that my sh was actually just bash.

Best Answer

Because you used sh, not bash, then echo command in sh doesn't have option -e. From sh manpage:

echo [-n] args...
            Print the arguments on the standard output, separated by spaces.
            Unless the -n option is present, a newline is output following the
            arguments.

And it doesn't have \e, too:

        If any of the following sequences of characters is encountered
        during output, the sequence is not output.  Instead, the specified
        action is performed:

        \b      A backspace character is output.

        \c      Subsequent output is suppressed.  This is normally used at
                the end of the last argument to suppress the trailing new‐
                line that echo would otherwise output.

        \f      Output a form feed.

        \n      Output a newline character.

        \r      Output a carriage return.

        \t      Output a (horizontal) tab character.

        \v      Output a vertical tab.

        \0digits
                Output the character whose value is given by zero to three
                octal digits.  If there are zero digits, a nul character
                is output.

        \\      Output a backslash.

        All other backslash sequences elicit undefined behaviour.
Related Question