에코로 '-e'를 어떻게 인쇄합니까?

에코로 '-e'를 어떻게 인쇄합니까?

나는 그것이 echo -e평범한 명령이 아니라는 것을 안다. 시도해 보았지만 echo '-e'여전히 echo \-e작동하지 않습니다.

답변1

가장 좋은 해결책은 을 사용하는 것이 아니라 대신 echo사용하는 것입니다 printf.

printf '%s\n' -e

이는 임의의 변수와 함께 작동합니다.

var=-e
printf '%s\n' "$var"

...즉, 값이 d라는 지식을 기반으로 코드의 다른 곳에서 특별한 준비/수정을 수행할 필요가 없다는 의미입니다 echo.


그런데,POSIX 쉘 명령 사양echo구현된 대로 이식할 수 없으며 해당 주제에 대한 참고 사항이 포함되어 있음을 인정합니다.

-n(첫 번째 인수)과 이스케이프 시퀀스를 모두 생략하지 않는 한 모든 POSIX 시스템에서 echo 이식성을 사용할 수 없습니다.

printf 유틸리티는 다음과 같이 echo 유틸리티의 기존 동작을 에뮬레이트하기 위해 이식적으로 사용할 수 있습니다(IFS에 표준 값이 있거나 설정되지 않았다고 가정).

이 POSIX.1-2008 볼륨의 XSI 구현에 대한 역사적인 System V 에코와 요구 사항은 다음과 동일합니다.

printf "%b\n" "$*"

BSD 에코는 다음과 동일합니다.

if [ "X$1" = "X-n" ]
then
    shift
    printf "%s" "$*"
else
    printf "%s\n" "$*"
fi

새로운 애플리케이션에서는 echo 대신 printf를 사용하는 것이 좋습니다.

(강조 추가).


즉, GNU 시스템에는 표준 준수 동작을 요청하는 대안이 있습니다.

$ POSIXLY_CORRECT=1 /bin/echo -e
-e

답변2

  • 개행 문자 포함

    echo -en '-e\n'
    
  • 개행 없이

    echo -e '-e\c'
    
  • 주위에 공백이 있음:

    echo '-e '
    echo ' -e'
    
  • 백스페이스 사용(Joseph R.에게 감사드립니다):

    echo -e ' \b-e'
    

    (SPC BS - e LF를 출력하지만 -eBS로 렌더링되는 터미널로 전송되면 커서가 한 열 왼쪽으로 뒤로 이동하여 -SPC를 덮어쓰게 됩니다)

bash의 내장 동작은 echobash 버전에 따라 달라질 수 있습니다. 또한 환경( POSIXLY_CORRECTSHELLOPTS변수 BASHOPTS), 옵션( posix, xpg_echo), 빌드 옵션 및 argv[0]( shvs bash)에 따라 달라집니다. 여기서는 GNU bash 4.2.53(1)기본 빌드, 기본 옵션, 빈 환경으로 테스트되었으며 bash. 에서도 작동합니다 zsh 5.0.5.

답변3

문자에 대한 ASCII 코드가 있는 GNU echo의 경우:-e

$ /bin/echo -e '\055'e
-e

055의 8진수 ASCII 숫자입니다 -( man ascii빠른 참조는 참조).

답변4

-n개행을 방지하려면 다음을 사용하세요 .

$ echo -n - && echo e
-e

관련 정보