不同终端中的echo对转义字符的处理方式

相同命令在不同终端/系统/Shell的不同效果

今天在用make编译一个终端help文档的时候有人提到,在不同的系统上echo有时候会自动展开转义字符有时候不会。最后问题解决是在makefile中显式指定使用的shell为/bin/bash,对于其他文件也可以类似的在需要执行的文件开头显式声明执行使用的shell

各个echo中默认的转义选项

但我还是觉得这个问题很奇妙,于是我输入man echo查看文档是怎么说的
发现文档中说的很清楚,默认是禁止转义字符的。但是不同版本的终端中可能会有所不同。

ECHO(1)                                                          User Commands                                                          ECHO(1)
NAME
       echo - display a line of text
SYNOPSIS
       echo [SHORT-OPTION]... [STRING]...
       echo LONG-OPTION
DESCRIPTION
       Echo the STRING(s) to standard output.
       -n     do not output the trailing newline
       -e     enable interpretation of backslash escapes
       -E     disable interpretation of backslash escapes (default)
       --help display this help and exit
        NOTE:  your  shell  may have its own version of echo, which usually supersedes the version described here.  Please refer to your shell's
        documentation for details about the options it supports.

然后我发现我的zsh默认就是展开转义字符的。而bash和sh就如文档中所说一般,默认禁止转义字符。

这里就要提到另一个问题,就是不同的终端为了加快命令的执行速度,会内置一些常用命令,其中就包括了echo,但是他们各自的默认实现有不一样。这一点一般是可以手动设置的,但是比较麻烦,所以下面整理一下看到的几个。

zsh的在线文档里搜索echo就可以看到其内建的echo默认是识别转义的,可以通过设置BSD_ECHO来改变这种默认行为(通常而言这都没必要)关于zsh的选项看这个文档

bash有中文文档的,可以设置xpg_echo 选项来改变是否转义。

如何获得echo的帮助文档

bash里可以help echo,还可以

enable -n echo
echo --help

系统echo可以/bin/echo --help,在其他内置的echo命令中无法使用这种形式。
而通常我们用的基本都是各个shell内置的echo,内置命令的说明一般的做法就是man sh,man bash,man zsh然后再shell的文档里搜索echo命令

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值