
메시지와 인쇄 데이터를 표시하기 위해 두 가지 명령을 사용할 수 printf
있습니다 echo
.
그렇다면 그들은 어떻게 다르게 사용했는가? 어느 것이 더 바람직합니까?
답변1
바람직하고 가장 널리 사용되는 것은 동일한 것이 아닙니다. printf
여러 가지 이유로 더 좋지만 대부분의 사람들은 구문이 더 간단하기 때문에 여전히 사용 합니다 echo
.
선호해야 하는 주요 이유는 printf
다음과 같습니다.
echo
표준화되지 않았으므로 시스템마다 다르게 작동합니다.을 할 때 실제로 무엇을 실행하고 있는지 예측하기는 어렵습니다
echo foo
. 설명하자면, 내 Debian 시스템에서:$ type -a echo echo is a shell builtin echo is /bin/echo
보시다시피 두 가지 다른
echo
명령이 있습니다. 하나는 내장된 쉘(이 경우 bash)이고 다른 하나는 별도의 바이너리입니다. 내장 기능bash
도 있지만printf
동작이 더 표준화되어 문제가 적습니다(지적해 주신 @ RaduRădeanu에게 감사드립니다).명령줄 스위치 의 일부(전부는 아님) 구현이
echo
지원되므로-
. 많은 프로그램이--
스위치의 끝과 인수의 시작을 나타내는 기능을 지원하지만(예를 들어, 포함된grep -- -a file
행을 찾습니다 ) 그렇지 않습니다. 그렇다면 인쇄는 어떻게 합니까 ?file
-a
echo
echo
-n
$ echo -n ## no output $ echo '-n' ## no output $ echo "-n" ## no output $ echo \-n ## no output $ echo -e '\055n' ## using the ASCII code works but only on implementations -n ## that support -e
printf
이 작업을 쉽게 수행할 수 있습니다.$ printf -- '-n\n' -n $ printf '%s\n' -n -n $ printf '\055n\n' -n
printf
가 보다 나은 이유에 대해 알고 싶었던 것보다 더 많은 정보를 보려면 echo
비슷한 질문에 대한 이 답변을 참조하세요.http://unix.stackexchange.com:
답변2
어느 것이 더 나은지 묻는 것 자체가 불완전합니다.
원하는 것이 하나 이상의 텍스트 줄을 내보내는 것이라면줄바꿈으로 종료됨, 에코이면 충분합니다. 특히 개행 문자가 없는 "부분 줄"을 포함하여 더 영리한 것을 의도한다면 printf가 가장 좋습니다.그 목적을 위해.