Linux中[]中括號匹配問題[A-Z]會匹配小寫a-z:
在Ubuntu使用[]進行匹配時辕漂,發(fā)現(xiàn)ls [A-Z]*仍然可以匹配到小寫字母開頭的目錄七咧,這是因為語系不同贷笛,導致編碼順序不同:
LANG=C:ABC...Zabc...z
LANG=zh_CN: aAbBcC...zZ
當語系為zh_CN踏施,[a-z] 就會包括ABC..Y
如果要用[A-Z]只表示大寫字母范圍石蔗,需要設置環(huán)境變量
export LC_ALL=C
取消用
unset LC_ALL
在很多shell腳本中在開頭部分加LC_ALL=C就是為了去除所有本地化的設置,讓命令能正確執(zhí)行畅形。
在Linux中通過locale來設置程序運行的不同語言環(huán)境养距,locale由ANSI C提供支持。locale的命名規(guī)則為<</span>語言>_<</span>地區(qū)>.<</span>字符集編碼>日熬,如zh_CN.UTF-8棍厌,zh代表中文,CN代表大陸地區(qū),UTF-8表示字符集定铜。在locale環(huán)境中阳液,有一組變量,代表國際化環(huán)境中的不同設置:
- LC_COLLATE
定義該環(huán)境的排序和比較規(guī)則 - LC_CTYPE
用于字符分類和字符串處理揣炕,控制所有字符的處理方式帘皿,包括字符編碼,字符是單字節(jié)還是多字節(jié)畸陡,如何打印等鹰溜。是最重要的一個環(huán)境變量。 - LC_MONETARY
貨幣格式 - LC_NUMERIC
非貨幣的數(shù)字顯示格式 - LC_TIME
時間和日期格式 - LC_MESSAGES
提示信息的語言丁恭。另外還有一個LANGUAGE參數(shù)曹动,它與LC_MESSAGES相似,但如果該參數(shù)一旦設置牲览,則LC_MESSAGES參數(shù)就會失效墓陈。LANGUAGE參數(shù)可同時設置多種語言信息,如LANGUANE="zh_CN.GB18030:zh_CN.GB2312:zh_CN"第献。 - LANG
LC_的默認值贡必,是最低級別的設置,如果LC_沒有設置庸毫,則使用該值仔拟。類似于 LC_ALL。 - LC_ALL
它是一個宏飒赃,如果該值設置了利花,則該值會覆蓋所有LC_*的設置值恋拷。注意艰亮,LANG的值不受該宏影響。
C"是系統(tǒng)默認的locale娃圆,"POSIX"是"C"的別名蔫慧。所以當我們新安裝完一個系統(tǒng)時羡洛,默認的locale就是C或POSIX。
參考鏈接:
https://blog.csdn.net/z4213489/article/details/7937894(推薦藕漱,更為詳細欲侮,通俗易懂)
http://blog.sina.com.cn/s/blog_81b27a5a0101gkqf.html