echo를 사용하여 "-e"를 인쇄하는 방법은 무엇입니까?

echo를 사용하여 "-e"를 인쇄하는 방법은 무엇입니까?

나는 이것이 echo -e일반적인 명령이 아니라는 것을 안다. echo '-e'나는 이것을 시도했지만 echo \-e여전히 작동하지 않습니다.

답변1

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

printf '%s\n' -e

이는 임의의 변수에 대해 작동합니다.

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

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


그런데,POSIX 쉘 명령 사양echo구현 시 이식이 불가능하다는 점을 인정하고 주제에 대한 참고 사항을 포함하세요.

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

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

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

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를 출력하지만 BS로 렌더링된 터미널로 전송되면 -e커서를 왼쪽으로 한 열 뒤로 이동하여 -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

GNU echo문자 의 -eASCII 코드 :

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

0558진수 ASCII 숫자입니다 -( man ascii빠른 참조 참조).

답변4

-n줄 바꿈을 방지하는 데 사용됩니다 .

$ echo -n - && echo e
-e

관련 정보