"wc -c"가 echo로 하나 이상의 값을 인쇄하는 이유는 무엇입니까?


13

달릴 때

echo abcd | wc -c

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

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

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



1
양해하여 주시기 바랍니다 wc -c일이 얼마나 많은 문자를 알려하지 않는다; 바이트 수만 알려줍니다.
tchrist

답변:


21

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구현 (모든 유닉스 호환 구현)에서는 echo 'abcd\c'출력 abcd만 한다는 것 입니다. echo -e 'abcd\c'유닉스 호환 echo구현에서는을 출력 -e abcd합니다.
Stéphane Chazelas 2016 년

5

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

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

echo -n abcd | wc -c

2

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

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

echo -n abcd | wc -c
4
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.