我想列出名称模式如 [max|min].txt 的文件,因此
ls [max|min].txt在 bash shell 中执行,但它不起作用,我得到的错误消息是:
ls: cannot access [max: No such file或目录
那么完成这项工作的正确方法是什么?
我想列出名称模式如 [max|min].txt 的文件,因此
ls [max|min].txt在 bash shell 中执行,但它不起作用,我得到的错误消息是:
ls: cannot access [max: No such file或目录
那么完成这项工作的正确方法是什么?
方括号用于字符匹配,竖线用于管道。您正在寻找大括号扩展。
ls {max,min}.txt
Bash 有一个名为的 shell 选项extglob,您可以使用命令启用该选项shopt -s extglob。这将允许您使用模式格式@(pattern-list),其中pattern-list管道分隔的模式列表。它将与文件名匹配,并排除任何与文件名不匹配的模式,就像[abc]范围表达式一样。Bash 也有大括号扩展,但这似乎不是您所要求的,因为大括号扩展与文件名不匹配,也不像通配符或范围表达式那样扩展。
$ shopt -s extglob
$ touch max.txt min.txt
$ echo @(max|min).txt
max.txt min.txt
$ echo @(min|mid|max).txt
max.txt min.txt
$ echo {min,mid,max}.txt
min.txt mid.txt max.txt
关于上面的命令序列有几点需要注意:
echo @(mid|min|max).txt不输出mid.txt,因为没有匹配的文件。echo @(min|mid|max).txt以与通配符扩展相同的方式重新排序要排序的输出。echo {min,mid,max}.txt是大括号扩展并按给定顺序输出所有元素。