对于 shell 脚本来说,八进制转义序列比十六进制转义序列更可移植吗

对于 shell 脚本来说,八进制转义序列比十六进制转义序列更可移植吗

作为编写能够处理任意数据的 shell 代码方案的一部分,我一直在寻找一种将空字节转换为其他字符的方法。我发现tr需要使用八进制转义任意字节。 Unix 实用程序的其他一些非 GNU 实现(我现在忘记了)也需要八进制转义序列来代替\xHH其输出中更常见和不可打印的字符,并表示为八进制转义序列。 Linux 中环回设备的支持文件可以在以下位置找到/sys/block/${LOOP_DEVICE}/loop/backing_file:支持文件路径中的不可打印字符表示为文字\012

我认为八进制转义序列是 POSIX 标准或自 Unix 时代以来的做法,\xHH当我了解tr使用它们时,它是较新且支持较少的,但我不确定这种怀疑是否正确。使用\OOOover是否\xHH会提高我的 shell 脚本/函数的可移植性?

答案1

支持的内容取决于实用程序。对于trprintf,POSIX 仅支持八进制序列,不支持十六进制序列。大多数现代 Unix 系统至少尝试实现 POSIX 标准,因此依赖其功能通常是安全的。

如果您想查看 POSIX 支持什么,最新版本在线;您可以查看“Shell 和实用程序”部分以查看有关每个实用程序的信息。

相关内容