Cha*_*ffy 25
最好的解决方案不是使用echo,而是使用printf。
printf '%s\n' -e
Run Code Online (Sandbox Code Playgroud)
这适用于任意变量:
var=-e
printf '%s\n' "$var"
Run Code Online (Sandbox Code Playgroud)
...意味着您不需要根据值将是echod的知识在代码的其他地方进行任何特殊的准备/修改。
顺便说一下,POSIX shell 命令规范echo承认它在实现时是不可移植的,并包含关于该主题的注释:
除非 -n(作为第一个参数)和转义序列都被省略,否则不可能在所有 POSIX 系统中便携地使用 echo。
printf 实用程序可移植地用于模拟 echo 实用程序的任何传统行为,如下所示(假设 IFS 具有其标准值或未设置):
本卷 POSIX.1-2008 中历史性的 System V 回声和对 XSI 实现的要求等价于:
Run Code Online (Sandbox Code Playgroud)printf "%b\n" "$*"BSD 回声相当于:
Run Code Online (Sandbox Code Playgroud)if [ "X$1" = "X-n" ] then shift printf "%s" "$*" else printf "%s\n" "$*" fi鼓励新应用程序使用 printf 而不是 echo。
(强调)。
也就是说,在 GNU 系统上,存在另一种选择:请求符合标准的行为。
$ POSIXLY_CORRECT=1 /bin/echo -e
-e
Run Code Online (Sandbox Code Playgroud)
换行
echo -en '-e\n'
Run Code Online (Sandbox Code Playgroud)没有换行符
echo -e '-e\c'
Run Code Online (Sandbox Code Playgroud)周围有空格:
echo '-e '
echo ' -e'
Run Code Online (Sandbox Code Playgroud)使用退格键(感谢 Joseph R.):
echo -e ' \b-e'
Run Code Online (Sandbox Code Playgroud)
(它确实输出 SPC BS - e LF,但是当发送到呈现-e为 BS 将光标向左移动一列导致-覆盖 SPC 时呈现的终端时)
bash的echo内置行为可能取决于 bash 版本。它还取决于环境(POSIXLY_CORRECT、SHELLOPTS和BASHOPTS变量)、选项(posix、xpg_echo)、构建选项和argv[0](shvs bash)。这里测试了GNU bash 4.2.53(1),默认构建,默认选项,空环境,调用为bash. 也适用于zsh 5.0.5.
随着GNUecho的-e与字符的ASCII码:
$ /bin/echo -e '\055'e
-e
Run Code Online (Sandbox Code Playgroud)
055是八进制 ASCII 数字-(参见man ascii快速参考)。
| 归档时间: |
|
| 查看次数: |
4358 次 |
| 最近记录: |