如何使用 echo 打印“-e”?

如何使用 echo 打印“-e”?

我知道这echo -e不是一个普通的命令。我已经尝试过了echo '-e'echo \-e但它们仍然不起作用。

答案1

最好的解决办法不是不使用echo,而是使用printf

printf '%s\n' -e

这适用于任意变量:

var=-e
printf '%s\n' "$var"

...这意味着您不需要根据值将被echod 的知识在代码中的其他地方进行任何特殊的准备/修改。


顺便,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_CORRECTSHELLOPTSBASHOPTS变量)、选项(posixxpg_echo)、构建选项和argv[0]shvs 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

相关内容