POSIX 문자 집합

최근 정규 표현식을 배우면서 POSIX 문자 집합을 접하게 되었습니다. 이 전통적인 문자 영역의 장점은 문자 집합을 빠르게 지정하는 문제를 이해하기 쉽고 효율적으로 처리할 수 있다는 것입니다. . 하지만 여기서는 이에 대해 약간의 지식을 말씀드리고 싶습니다. 먼저, 경로 이름 확장 작업을 완료하기 위해 와일드카드가 어떻게 사용되는지 살펴보겠습니다. 우리는 어느 정도 문자 범위가 정규식에서 사용되는 것과 거의 동일한 방식으로 사용된다는 것을 알고 있지만 문제가 있습니다:

jeremy@ubuntu: /tmp$ ls /usr/sbin/ [ABCDEFGHIJKLMNOPQRSTUVWXYZ] *

/usr/sbin/ModemManager /usr/sbin/NetworkManager

이 명령은 파일 이름이 대문자로 시작하는 원하는 결과를 생성하지만 다음과 같습니다.

jeremy@ubuntu:/tmp$ ls /usr/sbin/[A-Z]*

/usr/sbin/bccmd /usr/sbin/pm-hibernate

/usr/sbin /biosdecode /usr/sbin/pm-powersave

/usr/sbin/bluetoothd /usr/sbin/pm-suspens

/usr/sbin/chat / usr/sbin/pm -일시 중지-하이브리드

/usr/sbin/chgpasswd /usr/sbin/popcon-largest-unused

/usr/sbin/chpasswd /usr/sbin/ 인기 콘테스트

p>

/usr/sbin/chroot /usr/sbin/pppconfig

/usr/sbin/cpgr /usr/sbin/pppd

/usr /sbin/cppw / usr/sbin/pppdump

/usr/sbin/cracklib-check /usr/sbin/pppoeconf

/usr/sbin/cracklib-format /usr/sbin /pppoe-discovery

/usr/sbin/cracklib-packer /usr/sbin/pppstats

이 명령을 통해 우리는 완전히 다른 결과를 얻습니다. 표시됨). 왜 그럴까요?

이것은 Unix가 처음 개발되었을 때 ASCII 문자만 알고 있었으며 이 기능은 그 사실을 반영합니다. ASCII에서 처음 32자(숫자 0 - 31)는 제어 코드(예: 탭, 백스페이스 및 캐리지 리턴)입니다. 다음 32자(32 - 63)에는 대부분의 구두점과 숫자 0-9를 포함하여 인쇄 가능한 문자가 포함됩니다.

다음 32자(64 - 95)에는 대문자와 구두점이 추가로 포함됩니다. 마지막 31자(96 - 127)에는 소문자와 더 많은 구두점이 포함됩니다. 이러한 배열에 따라 시스템은 다음 정렬 규칙을 사용합니다.

ABCDEFGHIJKLMNOPQRSNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ

이는 일반적인 사전 순서와 다르며 다음과 같습니다.

AABBCCDDEEFGGGHGHGH Hijjkkllmmmnnooppqrrssttuuvvvvwxxyyzz

유닉스 시스템의 인기가 미국 외 지역으로 확산되면서 미국 영어 범위에 없는 문자를 지원해야 할 필요성이 생겼다. 따라서 ASCII 문자 테이블은 전체 8비트를 사용하여 문자(숫자 128 - 255)를 추가하여 확장되어 더 많은 언어를 수용할 수 있게 되었습니다. 이 기능을 지원하기 위해 POSIX 표준은 특정 로케일, 즉 시스템의 언어 설정에 필요한 문자 집합을 선택하도록 조정할 수 있는 로케일이라는 개념을 도입했습니다. 이 설정을 사용하면 POSIX 호환 응용 프로그램은 ASCII 순서 대신 사전 순서를 사용합니다. 위 명령의 동작을 설명합니다. 이 결과는 사전식으로 해석될 때 [A-Z] 문자 범위에 소문자 "a"를 제외한 모든 문자가 포함되는 경우에 얻어집니다.

上篇: MacBook 노트북이 느리게 실행되는 이유는 무엇입니까? 下篇: Thinkphp5 보조 도메인 이름 구성
관련 내용