dc で無効または未定義のコマンドが実行されると、通常は警告が出力されるだけです。例:
cp
dc: stack empty
これはほとんどの場合は便利ですが、目的のアクションが実際に機能するため、煩わしい場合があります。次の例を考えてみましょう。
5 6+sИlИp
dc: 0230 unimplemented
dc: 0230 unimplemented
11
わかりますか? マニュアルに記載されているレジスタ以外のレジスタを使用しても、動作します。(「正式には」256 ですが、NUL バイトをどのように使用すればよいのでしょうか?)
必ずしも良いアイデアではないかもしれませんが、一部のスクリプトではこのような警告が表示されるようにしたいと思います。
dc が警告を印刷しないようにするにはどうすればよいですか?
答え1
エラーはマルチバイト文字が原因で、Gnu (およびすべての最新の Unix) は utf-8 を使用します。
したがって
dc <<< "5 6+s¢l¥p"
は と同等ですdc <<< "5 6+s¢l¢p"
。¢ と ¥ の最初のバイトは同じであり、レジスタのアドレスとして使用されます。2 番目のバイトでエラーが発生します。
出力を見る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 のコンピューター愛好家)。