如何抑制 GNU dc 警告?

如何抑制 GNU dc 警告?

当在dc中执行一些无效或未定义的命令时,它通常只是打印一条警告。例子:

cp
dc: stack empty

大多数时候这很好,但是,在某些情况下这很烦人,因为所需的操作实际上有效。考虑这个例子:

5 6+sИlИp
dc: 0230 unimplemented
dc: 0230 unimplemented
11

看?即使我尝试使用手册中的寄存器之外的其他寄存器,它仍然可以工作。 (“官方”是 256,但是你怎么能使用 NUL 字节呢?)

即使可能并不总是一个好主意,我希望 dc 现在在某些脚本中向我显示此类警告。

如何让 dc 不打印警告?

答案1

这些错误是由于多字节字符造成的,Gnu(我认为所有现代 Unixes)都使用 utf-8。

所以

dc <<< "5 6+s¢l¥p"相当于dc <<< "5 6+s¢l¢p". $和$的第一个字节相同,用作寄存器的地址。第二个字节产生错误。

参见输出od

#↳ od -ta -to1 <<< "5 6+s¢l¥p"
0000000   5  sp   6   +   s   B   "   l   B   %   p  nl
        065 040 066 053 163 302 242 154 302 245 160 012

因此,该错误是有效的,不应被忽略。


尝试这个测试用例,dc <<< "4s¢11s¥l¢p"您期望什么输出? (dc警告存在问题。)它会产生什么输出?

dc不支持 utf-8,它适用于字节。 utf-8 几乎但不完全兼容 8 位(类似 ascii)编码。

看:https://www.youtube.com/watch?v=MijmeoH9LT4(utf-8 上的计算机爱好者)。

相关内容