
나는 그것이 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를 출력하지만
-e
BS로 렌더링되는 터미널로 전송되면 커서가 한 열 왼쪽으로 뒤로 이동하여-
SPC를 덮어쓰게 됩니다)
bash
의 내장 동작은 echo
bash 버전에 따라 달라질 수 있습니다. 또한 환경( POSIXLY_CORRECT
및 SHELLOPTS
변수 BASHOPTS
), 옵션( posix
, xpg_echo
), 빌드 옵션 및 argv[0]
( sh
vs 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