임의의 데이터를 처리할 수 있는 쉘 코드를 작성하는 프로젝트의 일환으로 저는 널 바이트를 다른 문자로 변환하는 방법을 찾고 있었습니다. tr
임의의 바이트를 8진수를 사용하여 이스케이프해야 한다는 것을 발견했습니다 . Unix 유틸리티의 일부 다른 비GNU 구현(지금은 잊어버렸습니다)도 \xHH
출력에서 보다 일반적이고 인쇄할 수 없는 문자 대신 8진수 이스케이프 시퀀스를 요구하며 8진수 이스케이프 시퀀스로 표시됩니다. Linux의 루프백 장치에 대한 지원 파일은 다음에서 찾을 수 있습니다 /sys/block/${LOOP_DEVICE}/loop/backing_file
. 리터럴로 표시되는 인쇄할 수 없는 문자에 대한 지원 파일 경로 \012
.
나는 8진수 이스케이프 시퀀스가 POSIX 표준이거나 Unix 시절부터 사용된 관행이라고 가정합니다. Unix는 사용 방법을 \xHH
배웠을 tr
때 더 새롭고 덜 지원되었지만 이러한 의심이 맞는지는 확실하지 않습니다. \OOO
과도하게 사용하면 \xHH
쉘 스크립트/함수의 이식성이 향상됩니까?
답변1
지원되는 내용은 유틸리티에 따라 다릅니다. tr
및 의 경우 printf
POSIX는 16진수 시퀀스가 아닌 8진수 시퀀스만 지원합니다. 대부분의 최신 Unix 시스템은 최소한 POSIX 표준을 구현하려고 시도하므로 일반적으로 POSIX 표준의 기능에 의존하는 것이 안전합니다.
POSIX가 무엇을 지원하는지 알고 싶다면,최신 버전온라인에서는 셸 및 유틸리티 섹션에서 각 유틸리티에 대한 정보를 볼 수 있습니다.