Когда в dc выполняются какие-то недопустимые или неопределенные команды, он обычно просто выводит предупреждение. Пример:
cp
dc: stack empty
Это хорошо в большинстве случаев, однако есть случаи, когда это раздражает, так как желаемое действие на самом деле работает. Рассмотрим этот пример:
5 6+sИlИp
dc: 0230 unimplemented
dc: 0230 unimplemented
11
Видите? Даже если я попытаюсь использовать другой регистр, а не те, что указаны в руководстве, он все равно будет работать. («официально» 256, но как вообще можно использовать нулевой байт?)
Даже если это, возможно, не всегда хорошая идея, я бы хотел, чтобы DC теперь показывал мне такие предупреждения в некоторых скриптах.
Как сделать так, чтобы dc не выводил предупреждения?
решение1
Ошибки возникают из-за многобайтовых символов, Gnu (и, я думаю, все современные Unix-системы) используют 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).