bash에서 printf와 echo의 차이점

bash에서 printf와 echo의 차이점

printfbash에서 함수와 함수의 차이점은 무엇입니까 echo?

구체적으로 다음을 실행합니다.

echo "blah" >/dev/udp/localhost/8125

8125를 수신하는 서버에 "어쩌구" 명령이 전송되지 않았습니다.

printf "blah" >/dev/udp/localhost/8125

데이터가 전송되었습니다. printf는 출력이 끝날 때 추가 EOF를 보냅니까?

답변1

둘 다 내장 명령 echo입니다 ( 1998년 v2.0.2부터 Bash에 내장됨). 항상 상태 0으로 종료하고 단순히 표준 출력에 인수를 인쇄한 다음 줄 종결자를 표시하고 형식 문자열을 정의하도록 허용하고 실패 시 0이 아닌 종료 상태 코드를 제공합니다.printfprintfechoprintf

printf출력 형식을 더 효과적으로 제어할 수 있습니다. 프로젝트에서 사용하는 필드 너비뿐만 아니라 숫자에 대한 다양한 형식 지정 옵션(예: 사용할 출력 기준, 지수 인쇄 여부, 기호 인쇄 여부, 나중에 인쇄할 자릿수 수 등)을 지정하는 데 사용할 수 있습니다. ). 소수점). 이는 다른 매개변수가 인쇄되는 방법과 위치를 제어하는 ​​형식 문자열을 제공하여 수행되며 C 언어( %03d, %e, %+d, ...) 와 동일한 구문을 갖습니다 . 이는 format () 을 논의하지 않을 때 백분율 기호를 이스케이프해야 함을 의미합니다 %%.

echo아마도 기본적으로 사용되는 개행 문자를 추가하면( -n옵션을 사용하는 경우 제외) 동일한 효과를 얻을 수 있습니다.

printf "blah\n" >/dev/udp/localhost/8125

성능에 관해서는 문자열을 읽고 형식을 지정해야 하는 echo후자보다 이것이 더 빠르다고 항상 생각했습니다 . printf그러나 time(또한 내장된) 테스트에서는 다음과 같은 결과가 나타났습니다.

$ time for i in {1..999999}; do echo "$i" >/dev/null; done
real    0m10.191s
user    0m4.940s
sys 0m1.710s

$ time for i in {1..999999}; do printf "$i" >/dev/null; done
real    0m9.073s
user    0m4.690s
sys 0m1.310s

기본적으로 다음 printf과 같이 줄바꿈을 추가하도록 지시합니다 .echo

$ time for i in {1..999999}; do printf "$i\n" >/dev/null; done
real    0m8.940s
user    0m4.230s
sys 0m1.460s

이는 인쇄하지 않는 것보다는 확실히 느리지만 \n, 인쇄하는 것보다는 빠릅니다 echo.

답변2

차이점은 echo출력 끝에 개행 문자를 보낸다는 것입니다. EOF를 "보내는" 방법은 없습니다.

답변3

이것은 아마도 echo와 printf에 대한 가장 좋은 설명일 것입니다.

http://www.in-ulm.de/~mascheck/various/echo+printf/

매우 높은 수준에서.. printf는 echo와 비슷하지만 더 많은 서식을 지정할 수 있습니다.

답변4

문자열 "-e"를 문자 그대로 인쇄하려면 echo를 사용하는 데 어려움이 있습니다. 최근에 스크립트를 작성하는 동안 이 문제가 발생했습니다.

리터럴 문자열 "-e"를 인쇄하려면 prinf를 사용해야 합니다.

관련 정보