当在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 上的计算机爱好者)。