에코보다 Printf를 사용하는 이유

이 게시물originally appeared on my personal blog .

echo는 텍스트를 표준 출력으로 인쇄하는 더 널리 알려진 명령이지만 다양한 구현에서 동작 및 설명서 불일치를 발견했습니다1.

macOS 에코 매뉴얼 페이지:


우분투 에코 매뉴얼 페이지:


또한 기본 동작은 base64와 같은 문자에 민감한 명령과 결합할 때 의도하지 않은 결과를 초래할 수 있습니다. 다음은 echo로 인해 문제가 발생한 몇 가지 사용 사례입니다.

  • 비밀 관리에 넣을 Base64 인코딩 자격 증명(Hashicorp Vault, kubernetes 등)

    #!/usr/bin/env bash
    
    PASSWORD="supersecretpassword"
    
    # echo output
    echo "${PASSWORD}" | base64
    c3VwZXJzZWNyZXRwYXNzd29yZAo=
    
    # printf output
    printf "${PASSWORD}" | base64
    c3VwZXJzZWNyZXRwYXNzd29yZA==
    

    Echo는 base64 명령으로 파이프된 출력에 전달되고 base64로 인코딩된 출력에도 표시될 줄 바꿈을 출력 끝에 추가합니다.



  • 스크립트 출력하기

    원하는 출력

    one line
    two line
    three line
    four
    

    스크립트

    #!/usr/bin/env bash
    
    INPUT="one line\ntwo line\nthree line\nfour"
    
    # echo output
    echo "${INPUT}"
    one line\ntwo line\nthree line\nfour
    
    # printf output
    printf "${INPUT}"
    one line
    two line
    three line
    four
    

    원하는 출력은 echo 인수와 함께 -e를 사용하여 얻을 수 있지만 위의 스크린샷에 표시된 것처럼 항상 문서화되어 있지는 않습니다.





  • https://unix.stackexchange.com/a/65819

    좋은 웹페이지 즐겨찾기