1

我想列出名称模式如 [max|min].txt 的文件,因此 ls [max|min].txt在 bash shell 中执行,但它不起作用,我得到的错误消息是: ls: cannot access [max: No such file或目录

那么完成这项工作的正确方法是什么?

4

2 回答 2

4

方括号用于字符匹配,竖线用于管道。您正在寻找大括号扩展

ls {max,min}.txt
于 2012-05-28T06:47:04.380 回答
1

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

关于上面的命令序列有几点需要注意:

  1. echo @(mid|min|max).txt不输出mid.txt,因为没有匹配的文件。
  2. echo @(min|mid|max).txt以与通配符扩展相同的方式重新排序要排序的输出。
  3. echo {min,mid,max}.txt是大括号扩展并按给定顺序输出所有元素。
于 2012-05-28T12:43:20.443 回答