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
(탭 등으로 바꾸는 것과 같습니다).echo
bash
\e
\t
이스케이프 문자를 $foo
거치지 않고 직접 에 통합하려면 echo -e
문자열에 실제 이스케이프 문자를 입력해야 합니다.
에서는 뒤로를 눌러 bash
텍스트 이스케이프 문자를 입력 할 수 있습니다.Ctrl+VEsc
터미널에서는 다음과 같습니다.
foo="^[[32mFOO^[[0m"
이들 각각은 다음에 ^[
의해 생성됩니다 .Ctrl+VEsc
또는 $'...'
( 의 "C 문자열 보간")을 사용하여 bash
다음을 확장 할 수 있습니다 \e
.
foo=$'\e[32mFOO\e[0m'