Bash,输出后新打印

时间:2013-08-17 23:51:10

标签: bash utf-8 locale

好吧,最近我已经碰到了几次 如果你在终端中运行echo 'G1o=' | base64 -d,你就会得到 username@hostname:~$62;9;c

我认为它与语言环境有关,但它是否是'正常'行为,它在命令输出之后“放置”?

2 个答案:

答案 0 :(得分:1)

base64 G1o=解码为十六进制1B 5a,即 ESC Z 。这就是DECID转义序列,它在终端实际上​​不是计算机的一部分而是通过串行电缆连接的设备的时代,是计算机可以向终端询问它究竟是什么的方式。 (这实际上不是标准;它是由DEC制造的终端实现的私人代码;因此DEC IDentification.DEC代表Digital Equipment Corporation,值得注意的是制造可能是第一台台式计算机,PDP-8,我拥有的机器在我十几岁的时候学习编码的乐趣。)

奇怪的是,终端模拟器仍然支持这些东西,所以如果你把ESC-Z写入终端程序,它会通过告诉你它模糊地假装是什么样的历史终端来做出回应。例如,如果您要在Linux控制台中执行此操作,它将响应:ESC [ ? 6 c这是DEC VT-102的代码。

(顺便说一句,您的终端模拟器显然正在响应ESC [ ? 62;9 c,这是具有各种扩展“国家替换字符”集的VT-220的代码 - 这是;9部分。 )

答案 1 :(得分:0)

取决于您认为“正常”的内容。所有程序都设置为0和1按特殊顺序排列。显然,base64中的'G'和'1'分别是'enter'和'end of line'。要确认这一点,只需将序列更改为其他任何序列。