wc -L 报告制表符的行长度为 8。错误或功能?

Pet*_*r.O 13 text-processing

-L是 的一个有用功能wc,或者我认为。它打印最长行的长度。出于某种原因,它将单字节 tab-char 扩展到 8 的长度。
有什么方法可以将其设置为不“扩展”选项卡?这种扩张背后的原因可能是什么?

echo -n $'\t' | wc -L
Run Code Online (Sandbox Code Playgroud)

产出 8

wc (GNU coreutils) 7.4
GNU bash,版本 4.1.5

enz*_*tib 12

我没有发现与此相关的错误报告,源文件中有以下几行wc.c

    case '\t':
        linepos += 8 - (linepos % 8);
Run Code Online (Sandbox Code Playgroud)

似乎故意选择以这种方式行事,可能是为了提示在屏幕上显示文件所需的宽度。

一个快速的替代方案可能是

echo -n $'\t' | tr '\t' ' ' | wc -L
Run Code Online (Sandbox Code Playgroud)

  • 谢谢恩佐,我现在发现虽然`man wc` 没有提到这个问题,但它在`info coreutils 'wc invocation'` 中有说明('man' 也指的是)......此外,在搜索谷歌之后-sphere 多一点,我发现这是一个替代`echo -n $'\t' | 展开 -t1 | wc -L`,这与您的替代方案几乎相同,但我已将其投入使用。 wc 支持不同的标签宽度](http://lists.gnu.org/archive/html/bug-coreutils/2009-06/msg00026.html) (3认同)