printf
bash에서 함수와 함수의 차이점은 무엇입니까 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이 아닌 종료 상태 코드를 제공합니다.printf
printf
echo
printf
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를 사용해야 합니다.