유니코드 문자를 사용하여 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 '
이것은 특별한 것을 사용합니다$'...'
인용하다bash
ANSI C 이스케이프를 지원하고 있습니다 . 이것은 0a
단지 개행(개행) 문자일 뿐이며, 여러분이 원하는 것으로 생각되므로 위의 공백으로 자유롭게 대체했습니다.
물론, PS1='☢ '
UTF-8 인코딩을 찾은 다음 이스케이프 문자를 입력하는 지루한 전체 과정을 거치는 대신 원시 문자 자체( )를 사용할 수도 있으며 여전히 작동합니다.
답변2
최신 버전의 bash에서는 유니코드 값을 사용할 수도 있습니다.
PS1=$'\u2622 '
이렇게 하면 로컬 문자 집합/인코딩이 utf-8이 아니더라도 올바르게(또는 적어도 나쁘지는 않게) 확장/표시됩니다(그렇지 않으면 거기에서 버그를 발견한 것처럼 bash가 충돌하거나 쓰레기를 출력하게 됩니다).