프롬프트가 오른쪽에서 왼쪽으로 바뀌는 텍스트를 방지하기 위해 bash 프롬프트(U200e)에 너비가 0인 LRM을 삽입하고 싶습니다. 너비가 0인 문자이기 때문에 본능적으로 \[<200e>\]
. 실제로 이로 인해 bash가 잘못된 위치에서 줄 바꿈되는 것으로 나타났습니다. 아무것도 포장하지 않았을 때,그 다음에잘 작동하는 것 같습니다.
나는 이해하지 못한다. Bash가 이 문자의 너비가 0임을 자동 감지하더라도 문자를 둘러싸면 \[...\]
아무런 문제가 발생하지 않습니다.
편집됨: 따라서 문제는 \[...\]
이스케이프가 실제로 필요한 시기와 이스케이프되는 문자의 너비가 실제로 0인 경우 어떻게 해로울 수 있는지입니다.
답변1
게시물 보기 Bash에서 길이가 0인 문자를 이스케이프 처리합니다.. 그리고 구체적으로 마이클 앨런의 답변 아래에서 재현합니다.
시퀀스 는 PS1을 포함한 일부 유틸리티에서 및 제어 코드를
\[
나타내는 데 사용됩니다 .\001
\002
\[
=>\x01
또는\001
\]
=>\x02
또는\002
\[
printf와 echo는 에서 로의 변환을 수행하지 않습니다\001
.그래서 해결책은 직접 변환을 수행하는 것이 었습니다. 길이가 0인 문자를 다음과 같이 래핑하는 대신
\[
:echo "\[\033[1;30m\]foo\[\033[0m\]"
출력은
\[foo\]
대신 실제 제어 코드를 출력합니다.
echo "\x01\033[1;30m\x02foo\x01\033[0m\x02"
foo
PS1 printf와 echo 모두에서 출력됩니다 .구체적인 예를 보려면 다음을 참조하세요.git-radar에 대한 커밋입니다.