Answers:
我找不到与此相关的错误报告,并且在源文件中没有以下几行 wc.c
case '\t':
linepos += 8 - (linepos % 8);
似乎是故意选择以这种方式运行,可能是为了提示在屏幕上显示文件所需的宽度。
一个快速的替代方法可能是
echo -n $'\t' | tr '\t' ' ' | wc -L
man wc
没有提及此问题,但在info coreutils 'wc invocation'
(“ man”也指代)中作了说明。此外,在对google-sphere进行了更多的拖曳之后,我发现这可以作为替代方案echo -n $'\t' | expand -t1 | wc -L
,它与您的替代品几乎相同,但是我已经将其投入了很好的测量。尽管以下链接是重新编译的wc hack *,但它可能对某些人很有用:wc支持不同的制表符宽度
通常,选项卡会扩展到下一个位置(可被8整除)+1 [1, 9, 17, 25, ...]
,因此,如果您需要它,就可以得到它。
请注意,-n与该问题无关,但$无关。
echo foo$'\t' | wc -L
也将返回8,因为
echo foo$'\t'bar
foo bar
如果将-e用于回显,则可以省略$:
echo -e '\t' | wc -L
8
因此,如果要将“ \ t”计为一个字节,只需省略-e和$:
echo '\t' | wc -L
2
echo '\t'
不会输出制表符(\ x09)。它输出一条长度为2的线,即。a '\'
和a 't'
。换行符不是行长度的一部分...(-n
在我的示例中,我检查了是否wc
可以正确处理没有尾随换行符的文件...)
wc --help
说:-L, --max-line-length print the length of the longest line?
。它不是在谈论字节,而是在谈论行长。
echo -e foo'\t'bar | wc -L
在11结果,而不是在14
foo\tbar
例子中,wc
已假定在的标称间距制表停止8 ...以下示例示出了如何wc
将忽略当前激活的制表位设置。它向终端输出一条线,该线宽/长为8个终端列,但wc
报告为11。此示例将制表位设置为每第6列...tabs -6; echo 12345678; echo -e "foo\tbar"|tee >(wc -L)
wc -L描述不明确。它返回最宽的显示宽度。要控制标签页扩展,您可以先过滤expand
。