[unix] “wc -c”가 echo로 하나 이상의 값을 인쇄하는 이유는 무엇입니까?

달릴 때

echo abcd | wc -c

를 반환합니다 5.
그러나 단어의 abcd길이는 4 자입니다.

되어 echo단어 후 일부 특수 문자를 인쇄 abcd?

그리고 echo그 인쇄를 막을 수 있습니까?



답변

echo\n끝에서 줄 바꿈 ( )을 인쇄

echo abcd | xxd
0000000: 6162 6364 0a          abcd.

일부 echo구현에서는 다음을 사용할 수 있습니다 -n.

-n 후행 줄 바꿈을 출력하지 마십시오

그리고 테스트 :

echo -n abcd | wc -c
4

다른 일부에서는 \c이스케이프 시퀀스 가 필요합니다 .

\c: <newline>그렇지 않으면 출력의 최종 인수 뒤에 나오는 것을 억제하십시오 . '\c'인수에서 다음에 나오는 모든 문자 는 무시됩니다.

echo -e 'abcd\c' | wc -c
4

다음을 사용하십시오 printf:

printf %s abcd | wc -c
4

( wc -c문자가 아닌 바이트 수 를 계산합니다 ( abcd일반적으로 동일 하지만 wc -m문자 수를 계산하는 데 사용 )).


답변

옵션 echo없이 실행 -n하면 인수 뒤에 개행 문자를 씁니다. 그렇지 않으면을 입력 echo foo하면 다음 쉘 프롬프트가 오른쪽에 나타납니다 foo. 그래서  wc줄 바꿈을 기대하고있다.

echo인쇄를 방지하려면 어떻게 해야합니까?

echo -n abcd | wc -c


답변

기본적으로 문자열 다음에 줄 바꿈 문자 ( )를 echo인쇄 합니다 (이렇게하면 인쇄 된 줄과 같은 줄 대신 다음 줄에 쉘 프롬프트 가 표시됩니다).\nabcd

후행 줄 바꿈 문자를 사용하지 않도록 -n매개 변수를 추가 할 수 있습니다 echo.

echo -n abcd | wc -c
4


답변