답변:
바람직하고 가장 널리 사용되는 것은 같은 것이 아닙니다. 하지만 printf
여러 가지 이유로 더 나은, 대부분의 사람들은 여전히 사용하는 echo
구문이 간단하기 때문이다.
선호해야하는 주요 이유 printf
는 다음과 같습니다.
echo
표준화되어 있지 않으면 다른 시스템에서 다르게 작동합니다.실제로 실행중인 것을 예측하기는 어렵습니다 echo foo
. 내 데비안 시스템에서 설명하기 위해 :
$ 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
나은 이유에 대해 알고 싶었던 것보다 자세한 내용 은 http://unix.stackexchange.comecho
에서 비슷한 질문에 대한 답변을 참조하십시오 .
printf
더 나은 통역사 를 선호하는 데 도움이됩니다 .
printf
(도 참조 type -a
)도 마찬가지입니다 .
echo
. 그 맞습니까?
echo
오히려 사용 하는 유일한 이유 printf
는 형식이 더 단순 할 수 있기 때문입니다. 인쇄중인 내용을 알고있는 경우 echo foo
보다 빠르고 입력하기가 쉽습니다 printf 'foo\n'
. 그 외에도 변수를 인쇄 해야하는 스크립트를 작성할 때을 사용해야 할 이유가 없습니다 echo
.
어느 쪽이 바람직한 지 묻는 것은 불완전합니다.
원하는 모든 것이 개행으로 끝나는 하나 이상의 텍스트 행을 내 보내면 echo가 충분합니다. 개행 문자가없는 "부분 라인"을 포함하여 더 영리한 것을 원한다면 printf가 그 목적에 가장 적합합니다 .
echo
구현 에 따라 "줄 바꾸기 방지"는로 쉽게 수행 할 수 있습니다 echo -n
. 사실, -n
가장 휴대 성이 뛰어난 에코 기능입니다. POSIX에 따르면 SystemV에는 없지만 대부분의 Unices에 존재합니다.
-n
하지만 다른 것은 모른다.