"-e" 옵션이나 중간 변수 없이 컬러 메시지를 "에코"하는 방법은 무엇입니까?

"-e" 옵션이나 중간 변수 없이 컬러 메시지를 "에코"하는 방법은 무엇입니까?

echo처리 (및 기타 명령) 시 동작을 이해하는 데 정말 어려움을 겪고 있습니다.ANSI 이스케이프 코드컬러 메시지를 인쇄합니다.

다음과 같은 옵션을 사용할 수 있다는 것을 알고 있습니다 -e.

echo -e "\e[32m FOO \e[0m"

내 메시지가 성공적으로 색칠될 것입니다.

echo -e또한 출력을 변수에 할당한 다음 echo새 명령에서 해당 변수를 재사용할 수 있다는 것을 알았습니다.-e옵션 없음, 어쨌든 작동합니다.

foo=$(echo -e "\e[32m FOO \e[0m")
echo $foo

echo -e그렇다면 ANSI 코드가 발견될 때 실제로 방출되는 "원시 바이트"는 무엇입니까? 내 foo변수에는 무엇이 포함되어 있나요? echo "??? FOO ???"이 옵션이 필요 없이 시스템에 직접 통합하려면 어떻게 해야 합니까 -e?

답변1

초기 "원시 출력"에는 echo대신 실제 이스케이프 문자(ASCII 코드 27, 8진수 033)가 포함됩니다 \e. 나머지 문자열은 그대로 유지됩니다. 이는 일련의 문자를 이스케이프 문자로 바꾸는 옵션입니다 -e(탭 등으로 바꾸는 것과 같습니다).echobash\e\t

이스케이프 문자를 $foo거치지 않고 직접 에 통합하려면 echo -e문자열에 실제 이스케이프 문자를 입력해야 합니다.

에서는 뒤로를 눌러 bash텍스트 이스케이프 문자를 입력 할 수 있습니다.Ctrl+VEsc

터미널에서는 다음과 같습니다.

foo="^[[32mFOO^[[0m"

이들 각각은 다음에 ^[의해 생성됩니다 .Ctrl+VEsc

또는 $'...'( 의 "C 문자열 보간")을 사용하여 bash다음을 확장 할 수 있습니다 \e.

foo=$'\e[32mFOO\e[0m'

관련 정보