답변:
평가는 플랫폼 (mac 또는 기타)에 의존하지 않습니다. 현재 로케일 설정에 따라 다릅니다.
$ LANG=C
$ if [[ "╝" = [█] ]]; then echo y; else echo n; fi
n
$ LANG=en_US.UTF-8
$ if [[ "╝" = [█] ]]; then echo y; else echo n; fi
y
간단한 스크립트를 통해 어떤 로케일이 표현식과 일치하는지 감지 할 수 있습니다.
for i in $(locale -a)
do
export LANG=$i
echo -n "LANG=$LANG "
if [[ "╝" = [█] ]]; then echo yes; else echo no; fi
done
UTF-8 로케일이 표현식과 일치하는지 확인하십시오. 로케일이 UTF-8 가능으로 설정되면 bash는 UTF-8 문자를 다른 방식으로 해석하므로 결과가 다른 이유입니다.
그럼에도 불구하고 UTF-8을 지원하는 로케일이 설정된 경우에도 false를 반환해야하기 때문에 버그라고 생각합니다.
bash -c 'LANG=en_US.UTF-8; [[ "╝" = [█] ]]'
또는 bash -c 'LANG=C; [[ "╝" = [█] ]]'
모두 무엇이든 상관없이 1을 반환합니다.
[]
패턴으로 간주 ). 어쩌면 소스 코드를보고 정확히 무엇이 잘못되었는지 알아야 할 수도 있습니다.