[閒聊] Set construct wildcards 的問題

作者: licheng (阿正)   2014-06-26 09:42:25
所謂 Set construct wildcards,
就是說,
在 Bourne Again shell (其他 shell 應該也一樣),
如果我們下達下述指令
ls [0-9]*
應該會列出所有開頭是數字的檔案名稱。
如果是
ls [a-z]*
應該會列出開頭是小寫英文字母的檔案名稱。
同理,
如果指令是
ls [A-Z]*
應該會列出開頭是大寫英文字母的檔案名稱。
至少書上是這麼說的。
假設目前所在位置,
有下述檔案
axxx.txt
bxxx.txt
cxxx.txt
Axxx.txt
Bxxx.txt
Cxxx.txt
如果我們下達
ls [a-c]*
結果應該是什麼? :)
作者: neutrino (十年一夢)   2014-06-26 09:47:00
驚 試了一下 究竟為何會這樣!?
作者: jokester (蠻王科科)   2014-06-26 10:42:00
奇怪矣 我在bash得到aAbBc 在zsh得到abc
作者: yvb   2014-06-26 14:27:00
應該跟 locale 有關, 請設定 LC_ALL=C 和 LANG=C 後再試試看.
作者: licheng (阿正)   2014-06-26 23:29:00
樓上正解 :) 目前 Linux,大多採用 UTF-8 編碼。而 UTF-8編碼的字元排序,跟過去 ASCII,是不一樣的。如果先export LANG=C,應該就會跟大多數 shell 書籍說的結果相同。喜歡寫 shell scripts 的朋友,這一點要注意。不然,會傻眼 :P
作者: jokester (蠻王科科)   2014-06-27 01:35:00
utf8字串在不同locale下排序也可能不同 這點也有危險
作者: kenduest (小州)   2014-06-30 01:57:00
考慮一下 [[:lower:]] 這類用法比較不會出問題

Links booklink

Contact Us: admin [ a t ] ucptt.com