有没有更简单的写法:
wc -l foo?.txt foo??.txt
?
由于我的情况(最多)有两位数字,我尝试使用范围规范wc -l foo[1-99].txt
,但最终只显示 1 到 9 之间的结果(而不是 99)。但这是一个(无效的)黑客,我真的需要类似的东西wc -l foo[?,??].txt
。
答案1
当你有两个或更多选择时,使用括号扩展:
foo{?,??}.txt
或者更具体地说:
foo{[0-9],[0-9][0-9]}.txt
例子
让我们考虑一个包含以下三个文件的目录:
$ ls foo*txt
foo111.txt foo11.txt foo1.txt
观察:
$ echo foo{?,??}.txt
foo1.txt foo11.txt
和:
$ echo foo{[0-9],[0-9][0-9]}.txt
foo1.txt foo11.txt
或者更简洁地说:
$ echo foo{,[0-9]}[0-9].txt
foo1.txt foo111.txt
答案2
使用 bash 的扩展的 glob( extglob
) 语法,您可以使用foo@(?|??)
例如
wc -l foo@(?|??).txt
在当前版本的 Ubuntu 交互式 shell 中,该extglob
选项应该默认启用,但如果没有,你可以使用以下命令启用它
shopt -s extglob