“ls”或正则表达式不区分大小写?

“ls”或正则表达式不区分大小写?

在 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。

相关内容