[闲聊] 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