Bash 프롬프트는 유니코드 이스케이프 문자를 인식할 수 없습니다.

Bash 프롬프트는 유니코드 이스케이프 문자를 인식할 수 없습니다.

유니코드 문자를 사용하여 Bash 프롬프트를 사용자 정의하려고 하는데 문제가 있습니다. 다음과 같은 유니코드 문자를 포함하려고 하면:

$ echo ☢ | hexdump -C
00000000  e2 98 a2 0a                                       |....|
00000004

$ PS1="\xe2\x98\xa2\x0a"

내 프롬프트는 다음과 같습니다.

\xe2\x98\xa2\x0a

...☢ 문자를 표시하는 대신. 내가 뭘 잘못했나요?

답변1

bash이는 간단한 큰따옴표에 대한 유효한 이스케이프 구문이 아닙니다. 시도 해봐

PS1=$'\xe2\x98\xa2 '

이것은 특별한 것을 사용합니다$'...'인용하다bashANSI C 이스케이프를 지원하고 있습니다 . 이것은 0a단지 개행(개행) 문자일 뿐이며, 여러분이 원하는 것으로 생각되므로 위의 공백으로 자유롭게 대체했습니다.

물론, PS1='☢ 'UTF-8 인코딩을 찾은 다음 이스케이프 문자를 입력하는 지루한 전체 과정을 거치는 대신 원시 문자 자체( )를 사용할 수도 있으며 여전히 작동합니다.

답변2

최신 버전의 bash에서는 유니코드 값을 사용할 수도 있습니다.

PS1=$'\u2622 '

이렇게 하면 로컬 문자 집합/인코딩이 utf-8이 아니더라도 올바르게(또는 적어도 나쁘지는 않게) 확장/표시됩니다(그렇지 않으면 거기에서 버그를 발견한 것처럼 bash가 충돌하거나 쓰레기를 출력하게 됩니다).

관련 정보