我想列出名称模式如 [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
是大括号扩展并按给定顺序输出所有元素。