我知道这echo -e
不是一个普通的命令。我已经尝试过了echo '-e'
,echo \-e
但它们仍然不起作用。
答案1
最好的解决办法不是不使用echo
,而是使用printf
。
printf '%s\n' -e
这适用于任意变量:
var=-e
printf '%s\n' "$var"
...这意味着您不需要根据值将被echo
d 的知识在代码中的其他地方进行任何特殊的准备/修改。
顺便,POSIX shell 命令规范echo
承认它在实施时是不可移植的,并包含关于该主题的注释:
除非省略 -n (作为第一个参数)和转义序列,否则不可能在所有 POSIX 系统中可移植地使用 echo。
printf 实用程序可用于模拟 echo 实用程序的任何传统行为,如下所示(假设 IFS 有其标准值或未设置):
POSIX.1-2008 本卷中历史性的 System V echo 和 XSI 实现的要求相当于:
printf "%b\n" "$*"
BSD echo 相当于:
if [ "X$1" = "X-n" ] then shift printf "%s" "$*" else printf "%s\n" "$*" fi
鼓励新应用程序使用 printf 而不是 echo。
(强调是后加的)。
也就是说,在 GNU 系统上,存在另一种选择:请求符合标准的行为。
$ POSIXLY_CORRECT=1 /bin/echo -e
-e
答案2
带换行符
echo -en '-e\n'
没有换行符
echo -e '-e\c'
周围有空格:
echo '-e ' echo ' -e'
使用退格键(感谢 Joseph R.):
echo -e ' \b-e'
(它确实输出 SPC BS - e LF,但是当发送到呈现为 BS 的终端时,
-e
会将光标向左移回一列,导致-
覆盖 SPC)
bash
的内置函数的行为echo
可能取决于 bash 版本。它还取决于环境(POSIXLY_CORRECT
、SHELLOPTS
和BASHOPTS
变量)、选项(posix
、xpg_echo
)、构建选项和argv[0]
(sh
vs bash
)。这里测试了GNU bash 4.2.53(1)
,默认构建,默认选项,空环境,调用为bash
。也适用于zsh 5.0.5
.
答案3
对于GNUecho
的-e
字符的 ASCII 代码:
$ /bin/echo -e '\055'e
-e
055
是八进制 ASCII 数字-
(请参阅man ascii
快速参考)。
答案4
用于-n
避免换行:
$ echo -n - && echo e
-e