Quando alguns comandos inválidos ou indefinidos são executados em dc, geralmente apenas imprime um aviso. Exemplo:
cp
dc: stack empty
Isso é bom na maioria das vezes, no entanto, há casos em que é irritante, pois a ação desejada realmente funciona. Considere este exemplo:
5 6+sИlИp
dc: 0230 unimplemented
dc: 0230 unimplemented
11
Ver? Mesmo se eu tentar usar outro registro que não os do manual, ele ainda funciona. ("oficialmente" 256, mas como você deve usar o byte NUL?)
Mesmo que nem sempre seja uma boa ideia, gostaria que o DC agora me mostrasse esses avisos em alguns scripts.
Como posso fazer com que o DC não imprima avisos?
Responder1
Os erros são por causa dos caracteres multibyte, Gnu (e acho que todos os Unixes modernos) usa utf-8.
Portanto
dc <<< "5 6+s¢l¥p"
é equivalente a dc <<< "5 6+s¢l¢p"
. O primeiro byte de ¢ e ¥ é igual e é usado como endereço do registrador. O segundo byte produz o erro.
veja a saída deod
#↳ 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
Portanto o erro é válido e não deve ser ignorado.
Experimente este caso de teste. dc <<< "4s¢11s¥l¢p"
Qual resultado você espera? ( dc
avisa que há um problema.) Qual resultado ele produz?
dc
não tem reconhecimento de utf-8, ele funciona em bytes. Utf-8 é quase, mas não totalmente compatível com codificações de 8 bits (semelhantes a ASCII).
ver:https://www.youtube.com/watch?v=MijmeoH9LT4(computerófilo em utf-8).