即使pattern是小写的,bash shell也会删除大写的文件名

时间:2016-03-15 09:06:55

标签: regex linux bash shell

我刚刚输入了一个带小写模式的rm命令,期望它只删除匹配的小写文件,但发现一些大写文件也被删除了:

<link rel="stylesheet"
    href="https://cdnjs.cloudflare.com/ajax/libs/free-jqgrid/4.13.1/plugins/ui.multiselect.min.css"
    integrity="sha384-ZiGiMTFP/JPxu5YXtclEjVDGZHbKOP2RBpOke65fQkSTg9yVHjpIBz3heEG6/7ja"
    crossorigin="anonymous">
<script src="https://cdnjs.cloudflare.com/ajax/libs/free-jqgrid/4.13.1/plugins/ui.multiselect.min.js"
    integrity="sha384-NrAnGBGjwjZspUViA2F5wJAZyC03l65Oaz39yB5Y3YDclQeASNM5luBMgPfDJRKE"
    crossorigin="anonymous"></script>

我在三个不同的Linux上尝试了这个,结果相同。这是预期的行为吗?我认为Linux严格区分大小写,而不是Windows。另外,我很惊讶[x-z]选择大写字符,但[x]没有。

3 个答案:

答案 0 :(得分:2)

您的语言区域是什么?设置区域设置可以影响字符的排序方式。

$ touch X
$ LC_ALL=C
$ ls [a-z]
ls: cannot access '[a-z]': No such file or directory
$ LC_ALL=cs_CZ
$ ls [a-z]
X

答案 1 :(得分:1)

也许您已经在bash中设置了nocasematch选项?看看

shopt -p nocasematch

如果回复显示 shopt -s nocasematch ,则表示已设置此选项。如果它显示 shopt -u nocasematch ,则表示未设置此选项。

答案 2 :(得分:1)

可能是由于nocaseglob已启用。

使用此命令检查:

shopt nocaseglob

要关闭它,请使用:

shopt -u nocaseglob

要打开它:

shopt -s nocaseglob

开启时:

shopt -s nullglon
shopt -s nocaseglob
touch X
echo [x-z]
# finds the file with uppercase X
X

关闭时:

shopt -u nocaseglob
echo [x-z]
# nothing here