wc 在 Unix 和 Linux 上的行为不同

wc 在 Unix 和 Linux 上的行为不同

当我尝试在 Linux 和 SunOS(Unix) 上使用“wc -c”回显值并计算字符数时,我观察到不同的结果。

root@SunOS-machine:~# echo "1" | wc -c
       2
root@Linux-machine:/# echo "1" | wc -c
2

看起来 Unix 机器上添加了前导空格。

root@SunOS-machine:~# echo "1" | wc -c | wc -c
       9
root@Linux-machine:/# echo "1" | wc -c | wc -c
2

我正在更新脚本以删除要在 Unix 系统中处理的前导空格。

我的问题是了解 Unix 系统上的这种行为。这是 Unix 系统的默认设置吗?

答案1

根据http://pubs.opengroup.org/onlinepubs/9699919799/:

默认情况下,标准输出应包含以下形式的每个输入文件的条目:

"%d %d %d %s\n"、<换行符>、<单词>、<字节>、<文件>

如果指定了 -m 选项,则字符数将替换此格式中的 <bytes> 字段。

如果指定了任何选项且未指定 -l 选项,则不写入 <newline> 字符数。

如果指定了任何选项且未指定-w 选项,则不写入字数。

如果指定了任何选项,但未指定 -c 或 -m,则不写入字节数或字符数。

如果未指定输入文件操作数,则不应写入名称,也不应写入路径名前面的 <blank> 字符。

如果指定了多个输入文件操作数,则应写入另一行,其格式与其他行相同,但应写入单词总计(在 POSIX 语言环境中)而不是路径名和每列的总计应酌情书写。这样的附加行(如果有)被写入输出的末尾。

因此,这两种实现似乎都不严格符合要求,因为标准似乎规定应该有 2 个前导空格。标准是一件有趣的事情。

相关内容