wc -Lはタブ行の長さを8として報告します。バグや機能?

wc -Lはタブ行の長さを8として報告します。バグや機能?

-Lwc少なくとも私の考えには便利な機能です。最長行の長さを印刷します。何らかの理由でシングルバイトのタブ文字を長さ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

echoに-eを使用すると、$を省略できます。

echo -e '\t' | wc -L
8

したがって、 '\t' を単一バイトとして計算するには、-e と $ を省略するだけです。

echo '\t' | wc -L
2

関連情報