일부 유효하지 않거나 정의되지 않은 명령이 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의 컴퓨터 애호가).