-L
是一个有用的功能wc
,至少我是这么认为的。它打印最长行的长度。由于某种原因,它将单字节制表符扩展为长度 8。
是否有某种方法可以将其设置为不“扩展”制表符?这种扩张背后的理由可能是什么?
echo -n $'\t' | wc -L
输出 8
wc (GNU coreutils) 7.4
GNU bash,版本 4.1.5
答案1
我发现没有与此相关的错误报告,并且以下几行源文件wc.c
case '\t':
linepos += 8 - (linepos % 8);
似乎故意选择这种方式,可能是为了提示在屏幕上显示文件所需的宽度。
一个快速的替代方案可能是
echo -n $'\t' | tr '\t' ' ' | wc -L
答案2
wc -L 描述不明确。它返回最宽的显示宽度。要控制选项卡扩展,您可以首先进行过滤expand
。
答案3
通常,选项卡会扩展到下一个位置(可被 8 整除)+1 [1, 9, 17, 25, ...]
,因此如果您要求它,您就会得到它。
请注意,-n 与问题无关,但 $ 则不然。
echo foo$'\t' | wc -L
也会返回 8,因为
echo foo$'\t'bar
foo bar
如果使用 -e 进行 echo,则可以省略 $:
echo -e '\t' | wc -L
8
因此,如果您想将 '\t' 算作单个字节,只需省略 -e 和 $:
echo '\t' | wc -L
2