當在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 上的電腦愛好者)。