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

관련 정보