dc에서 유효하지 않거나 정의되지 않은 명령을 실행하면 일반적으로 경고만 인쇄됩니다. 예:
cp
dc: stack empty
대부분의 경우에는 문제가 없지만 필요한 작업이 실제로 작동할 때 짜증나는 상황이 있습니다. 다음 예를 고려하십시오.
5 6+sИlИp
dc: 0230 unimplemented
dc: 0230 unimplemented
11
바라보다? 매뉴얼에 있는 레지스터가 아닌 다른 레지스터를 사용해봐도 여전히 작동합니다. ("공식적으로는" 256인데 NUL 바이트를 어떻게 사용할 수 있나요?)
항상 좋은 생각은 아닐 수도 있지만 이제 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의 컴퓨터 괴짜).