wc는 Unix와 Linux에서 다르게 동작합니다.

wc는 Unix와 Linux에서 다르게 동작합니다.

값을 에코하고 문자 수를 계산하기 위해 Linux 및 SunOS(Unix)에서 "wc -c"를 사용하려고 시도했을 때 다른 결과가 나타났습니다.

root@SunOS-machine:~# echo "1" | wc -c
       2
root@Linux-machine:/# echo "1" | wc -c
2

Unix 시스템에는 선행 공백이 추가된 것 같습니다.

root@SunOS-machine:~# echo "1" | wc -c | wc -c
       9
root@Linux-machine:/# echo "1" | wc -c | wc -c
2

Unix 시스템에서 처리할 선행 공백을 제거하는 스크립트를 업데이트하고 있습니다.

내 문제는 Unix 시스템에서 이러한 동작을 이해하는 것입니다. 이것이 Unix 시스템의 기본 설정입니까?

답변1

~에 따르면http://pubs.opengroup.org/onlinepubs/9699919799/:

기본적으로 표준 출력에는 다음 형식의 각 입력 파일에 대한 항목이 포함되어야 합니다.

"%d %d %d %s\n", <newline>, <word>, <byte>, <file>

-m 옵션이 지정되면 이 형식의 <bytes> 필드가 문자 수로 대체됩니다.

옵션을 지정하고 -l 옵션을 지정하지 않으면 <newline> 개수의 문자가 기록되지 않습니다.

옵션을 지정하고 -w 옵션을 지정하지 않으면 단어 수가 기록되지 않습니다.

옵션이 지정되었지만 -c 또는 -m이 지정되지 않은 경우 바이트 또는 문자 수가 기록되지 않습니다.

입력 파일 피연산자가 지정되지 않은 경우 이름을 쓰면 안 되며, 경로 이름 앞의 <공백> 문자도 쓰면 안 됩니다.

입력 파일 피연산자가 여러 개 지정된 경우 다른 라인도 다른 라인과 동일한 형식으로 작성하되, 경로명 대신 total(POSIX 로케일)이라는 단어를 작성하고 각 열에 대한 합계를 적절하게 작성해야 합니다. 이러한 추가 행(있는 경우)은 출력 끝에 기록됩니다.

따라서 두 구현 모두 엄격하게 준수하지 않는 것 같습니다. 표준에 2개의 선행 공백이 있어야 한다고 명시되어 있는 것 같습니다. 표준은 재미있는 것입니다.

관련 정보