回答:
これに関連するバグレポートはなく、ソースファイルに次の行があります。 wc.c
case '\t':
linepos += 8 - (linepos % 8);
おそらく画面上にファイルを表示するために必要な幅のヒントを与えるために、このように動作することを意図的に選択しているようです。
迅速な代替案は
echo -n $'\t' | tr '\t' ' ' | wc -L
man wc、この問題については言及していませんが、info coreutils 'wc invocation'(「男」も参照)に記載されていることがわかりました...また、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'を1バイトとしてカウントする場合は、-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ていない14に、11をもたらす
foo\tbar例でwcは、公称間隔8のタブストップを想定しています...次の例は、現在アクティブなタブストップ設定を無視する方法を示しています。これは、広い/ロング8端末の列である端子にラインを出力し、まだそれが11すべき報告書は、この例のセットごとに6列...に、タブは、停止したwcwctabs -6; echo 12345678; echo -e "foo\tbar"|tee >(wc -L)
wc -Lの説明はあいまいでした。最も広い表示幅を返します。タブの展開を制御するには、expand最初にフィルタリングできます。