어느 쪽이 더 나은 printf 또는 echo입니까?


16

메시지 및 인쇄 데이터를 표시하기 위해이 두 개의 명령을 사용할 수 있습니다 printfecho.
그러면 그들이 어떻게 다르게 사용 했습니까? 어느 것이 더 바람직한가요?


8
대답은 여기에서 찾을 수 있습니다 : unix.stackexchange.com/a/65819
user218740

답변:


27

바람직하고 가장 널리 사용되는 것은 같은 것이 아닙니다. 하지만 printf여러 가지 이유로 더 나은, 대부분의 사람들은 여전히 사용하는 echo구문이 간단하기 때문이다.

선호해야하는 주요 이유 printf는 다음과 같습니다.

  1. echo 표준화되어 있지 않으면 다른 시스템에서 다르게 작동합니다.
  2. 실제로 실행중인 것을 예측하기는 어렵습니다 echo foo. 내 데비안 시스템에서 설명하기 위해 :

    $ type -a echo
    echo is a shell builtin
    echo is /bin/echo
    

    보시다시피, 두 가지 echo명령이 있습니다. 하나는 셸 (이 경우에는 bash)이고 다른 하나는 별도의 이진입니다. 참고 bash또한이 printf내장을하지만 (이를 지적 @ RaduRădeanu 덕분에) 적은 문제를 그래서 그 동작이 더 표준화된다.

  3. 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 에서 비슷한 질문에 대한 답변을 참조하십시오 .

/unix//a/65819/22222


1
좋은 대답이 주어졌습니다. printf더 나은 통역사 를 선호하는 데 도움이됩니다 .
Pandya

3
2 단계 : printf(도 참조 type -a)도 마찬가지입니다 .
Radu Rădeanu

2
@ RaduRădeanu true이지만 POSIX에서 printf더 엄격하게 정의 되어 있으며 내장 기능이 동일한 표준을 따릅니다. POSIX의 사양 에 대한 echo다른 한편으로는 구현 및 그 사이의 차이가있을 것이다 덜 엄격한 상태에도 명시되어 printf바람직 할 것이다.
terdon

와. 그래서 거기에 사용하는 문자 그대로 제로 목적 기술적 장점 echo. 그 맞습니까?
JamesTheAwesomeDude 23시 47 분

1
@JamesTheAwesomeDude 아니오, 기술적 이점은 전혀 없습니다. echo오히려 사용 하는 유일한 이유 printf는 형식이 더 단순 할 수 있기 때문입니다. 인쇄중인 내용을 알고있는 경우 echo foo보다 빠르고 입력하기가 쉽습니다 printf 'foo\n'. 그 외에도 변수를 인쇄 해야하는 스크립트를 작성할 때을 사용해야 할 이유가 없습니다 echo.
terdon

4

어느 쪽이 바람직한 지 묻는 것은 불완전합니다.

원하는 모든 것이 개행으로 끝나는 하나 이상의 텍스트 행을 내 보내면 echo가 충분합니다. 개행 문자가없는 "부분 라인"을 포함하여 더 영리한 것을 원한다면 printf가 그 목적에 가장 적합합니다 .


echo구현 에 따라 "줄 바꾸기 방지"는로 쉽게 수행 할 수 있습니다 echo -n. 사실, -n가장 휴대 성이 뛰어난 에코 기능입니다. POSIX에 따르면 SystemV에는 없지만 대부분의 Unices에 존재합니다.
terdon

나는 에코로 줄 바꿈을 피하려고 시도하지 않기 위해 충분히 다른 unices에서 일했습니다. SCO, AIX, HP-UX 및 Linux에서 이식 가능한 스크립트를 작성하는 것은 쉽지 않습니다.
Monty Harder

아, 절대 논란이 없습니다. 내가 말하고 싶은 것은 개행이 가장 적은 문제라는 것입니다. 비 GNU 시스템으로 포팅하려고하면 모든 베팅이 종료됩니다. 나는 당신 이 BSD와 SystemV 에 의지 할 수 있다고 생각-n 하지만 다른 것은 모른다.
terdon
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.