저는 Xigmanas(NAS freebsd)를 사용하고 있습니다. 상황을 최대한 간단하게 설명하겠습니다.
:; set | egrep 'LC_A|LANG'
GDM_LANG=fr_FR.UTF-8
LANG=fr_FR.UTF-8
LC_ALL=fr_FR.UTF-8
SLIM_LANG=fr_FR.UTF-8
:; ls -i 1989* ; ls -i | grep 1989 ; ls -ib 1989* ; ls -ib | grep 1989
9920 1989 Amn??sia.mp4
9920 1989 Amnésia.mp4
9920 1989 Amn\303\251sia.mp4
9920 1989 Amn\303\251sia.mp4
ls
이는 악센트만 ??로 변환된 다음 채널을 차지하는 경우가 아닙니다 grep
.
파이프는 특히 스트림을 수정하여 바이트 스트림을 수정해서는 안 되기 때문에 설명이 보이지 않습니다!
ls
후속 grep
표시는 정확하지만 ls
개별 표시는 올바르지 않습니다.
어떻게 되어가나요?
답변1
이것은 작동합니다:
ls --show-control-chars A*
Amnésia
이것과 동일합니다.
ls A* | cat
Amnésia
ls
내 버전의 데비안() 문서에 ls (GNU coreutils) 8.32
따르면,
--show-control-chars
그래픽이 아닌 문자를 있는 그대로 표시합니다([...] 출력이 터미널이 아닌 경우 기본값)
é
\303\251
UTF-8 로케일에 표시된 2바이트( )는 그래픽이 아닌 문자가 아닌 인쇄된 문자로 처리되어야 하기 때문에 이는 버그일 수 있습니다 .
이제는 재현할 수 없습니다. export
로케일 변수가 있습니까 ? 이 명령에서 일련의 결과를 얻어야 합니다.
env | egrep 'LC_A|LANG'
그렇지 않은 경우 export
환경에 로케일 변수를 추가해 보십시오.
eval $(LC_ALL=fr_FR.UTF-8 locale | sed 's/^/export /' )
그런 다음 다시 시도해 보세요.
ls A*
Amnésia