在不同的 shell 中使用“echo -e”转义序列

在不同的 shell 中使用“echo -e”转义序列

我刚刚注意到Linux 上我的 shell 中的命令似乎-e不存在该标志。echo这只是一个混乱的设置还是“正常”?

一些代码作为示例:

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

印刷:

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

这以前有效!我猜有些stty命令出了严重错误,现在它不再起作用了。有人建议我sh实际上只是bash

答案1

因为你使用了sh,而不是bash,那么echo命令中sh就没有选项-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.

答案2

-e不是 POSIX(事实上,POSIX echo 通常不接受任何选项,尽管允许支持-n,请参阅这里),并且/bin/sh在您的系统上似乎是一个 POSIX shell。-e是某些 shell 接受的扩展,但您不应该依赖它,它不可移植。理想情况下,使用printf或切换到使用具有echo -e.

\e另请参阅下面评论中的警告,应将其替换为\033

printf '\033[3;12r\033[3H'

答案3

type echo请注意,在任何时候,在几乎任何 shell 中,您都可以通过键入或 来确定将调用哪个“echo” which echo。它通常是内置的 shell。所以这取决于安装了哪个“echo”以及您使用的 shell。

答案4

似乎是zsh想鼓励我们使用printf "blah\n"而不是echo -e "blah\n"出于某种原因。

相关内容