我刚刚注意到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"
出于某种原因。