作为编写能够处理任意数据的 shell 代码方案的一部分,我一直在寻找一种将空字节转换为其他字符的方法。我发现tr
需要使用八进制转义任意字节。 Unix 实用程序的其他一些非 GNU 实现(我现在忘记了)也需要八进制转义序列来代替\xHH
其输出中更常见和不可打印的字符,并表示为八进制转义序列。 Linux 中环回设备的支持文件可以在以下位置找到/sys/block/${LOOP_DEVICE}/loop/backing_file
:支持文件路径中的不可打印字符表示为文字\012
。
我认为八进制转义序列是 POSIX 标准或自 Unix 时代以来的做法,\xHH
当我了解tr
使用它们时,它是较新且支持较少的,但我不确定这种怀疑是否正确。使用\OOO
over是否\xHH
会提高我的 shell 脚本/函数的可移植性?
答案1
支持的内容取决于实用程序。对于tr
和printf
,POSIX 仅支持八进制序列,不支持十六进制序列。大多数现代 Unix 系统至少尝试实现 POSIX 标准,因此依赖其功能通常是安全的。
如果您想查看 POSIX 支持什么,最新版本在线;您可以查看“Shell 和实用程序”部分以查看有关每个实用程序的信息。