![根据 POSIX,OD 实用程序用什么字母分隔每个字节?](https://linux22.com/image/188147/%E6%A0%B9%E6%8D%AE%20POSIX%EF%BC%8COD%20%E5%AE%9E%E7%94%A8%E7%A8%8B%E5%BA%8F%E7%94%A8%E4%BB%80%E4%B9%88%E5%AD%97%E6%AF%8D%E5%88%86%E9%9A%94%E6%AF%8F%E4%B8%AA%E5%AD%97%E8%8A%82%EF%BC%9F.png)
以我的 Termux 为例,可以获得以下内容:
$ od -A n -t x1 /dev/urandom | head -n 2
e3 5d bf 57 fb 8b 63 06 4a 18 fe 28 73 8f 3e c0
9f 08 6b d4 2d 38 2c 68 3c 51 83 1e 71 7b 57 2b
正如您所看到的,这些值是用空格字符分隔的。
输入数据以块的形式进行操作,...。每个输入块将按照指定输出类型的顺序按照每种输出类型的转换进行写入,每写入行一个。如果输入块大小大于输出类型转换的字节数,...每个转换的输出将由一个或多个空白字符分隔。
我在上面的引文中用“…”替换,省略了一些不必要的部分。 2004年和2018年POSIX 版本的说法与上面相同。
该规范是否意味着可以使用制表符、“\f”、“\r”和任何其他[:blank:]
(在 BRE 中)而不是空格和 LF 来分隔每个字节、单词或其他内容?
附言。实际上,我正在考虑在 POSIXism 范围内将每个字节放入每一行的最有效和最快的方法。起初我想od -A n -t x1 -v | tr ABCDEF abcdef | tr -Cd abcdef0123456789\\n | fold -w 2 | grep .
或者类似的东西会更好。然后我发现 POSIX 规范说了一些有问题的内容,如上所述。另外小数怎么样:是一种方法,但是不使用...od -A n -t u1 -v | tr -Cs 0123456789- '[\n*]' | grep .
又怎么样?tr -C
它会让它更快吗?这就是目的。
答案1
很抱歉缺乏研究,但我刚刚发现了这一点:
在 POSIX 语言环境中,空白字符是制表符或空格字符。
来源。https://pubs.opengroup.org/onlinepubs/007908799/xbd/glossary.html#tag_004_000_031
因此,只有 ' 和制表符是分隔符(如果在 POSIX 语言环境中;此时我不关心其他语言环境)。我很抱歉将它们误认为是空格字符。