在 bash 中,我尝试过
ls [a-z]*
并期望列出文件名以小写字母开头的所有文件。但为什么文件名以大写字母开头的文件也会显示出来?
>ls [a-z]*
D e
>
如果需要的话,bash 版本:
bash --version GNU bash,版本 4.1.5(1)-release (i486-pc-linux-gnu) 版权所有 (C) 2009 Free Software Foundation, Inc. 许可证 GPLv3+:GNU GPL 版本 3 或更高版本http://gnu.org/licenses/gpl.html
This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
答案1
它不是正则表达式,这也是造成混淆的地方。相反,它使用一种称为“globbing”的系统 - 参见:
$ man 7 glob
您需要使用 [[:lower:]] 而不是 [az],如下所示:
$ ls -d [[:lower:]]*
答案2
1) 这可能取决于您的操作系统,更具体地说是您的文件系统。您的文件系统区分大小写吗?您没有提到操作系统或文件系统类型。
2) bash 也可以进行不区分大小写的通配符。你可以使用以下命令检查当前的情况是否如此:shopt | grep nocaseglob
另外,顺便说一句,请记住,这ls
不会对文件执行任何操作。您的 shell 会将文件名传递给 ls。