web-dev-qa-db-ja.com

異なるシェルで「echo -e」を使用したエスケープシーケンス

フラグ-eは、Linuxの私のシェルのechoコマンドには存在しません。これはめちゃくちゃな設定ですか、それとも「正常」ですか?

例としてのコード:

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

プリント:

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

これは以前に機能しました!いくつかのsttyコマンドがひどく間違っていたと思いますが、現在は機能していません。誰かが私のshは実際にはbashだと提案しました。

21
BrainStone

shではなくbashを使用したため、echoshコマンドにはオプション-eがありません。 shマンページから:

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.

また、\eもありません。

        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.
22
cuonglm

いつでも、ほぼすべてのシェルで、type echoまたはwhich echo。これは通常、シェルの組み込みです。つまり、インストールされている「エコー」と、使用しているシェルによって異なります。

4
piojo