當前位置:編程學習大全網 - 源碼下載 - POSIX 字符集

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-suspend

/usr/sbin/chat /usr/sbin/pm-suspend-hybrid

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

/usr/sbin/chpasswd /usr/sbin/popularity-contest

/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)都是控制碼(如 tabs,backspaces,和回車)。隨後的 32 個字符(32 - 63)包含可打印的字符,包括大多數的標點符號和數字 0 到 9。再隨後的 32 個字符(64 - 95)包含大寫字符和壹些更多的標點符號。最後的31 個字符(96 - 127)包含小寫字母和更多的標點符號。基於這種安排方式,系統使用這種排序規則的ASCII:

ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz

這個不同於正常的字典順序,其像這樣:

aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ

隨著 Unix 系統的知名度在美國之外的國家傳播開來,就需要支持不在 U.S. 英語範圍內的字符。於是就擴展了這個 ASCII 字符表,使用了整個 8 位,添加了字符(數字 128 - 255),這樣就容納了更多的語言。為了支持這種能力,POSIX 標準介紹了壹種叫做 locale 的概念,其可以被調整,來為某個特殊的區域,選擇所需的字符集,即系統的語言設置。通過這個設置,POSIX 相容的應用程序將會使用字典排列順序而不是 ASCII 順序。這就解釋了上述命令的行為。當 [A-Z] 字符區域按照字典順序解釋的時候,包含除了小寫字母“a”之外的所有字母,因此得到這樣的結果。

  • 上一篇:windows xp professional 2006(要有序列號的)在哪下載?
  • 下一篇:竊取數據的病毒有哪幾類,方式是什麽?
  • copyright 2024編程學習大全網