假设我有许多名为file1,file2,file3等的文件。我正在尝试找到一种方法来匹配前N个文件,在Bash脚本中,其中N是一个变量。以下是我到目前为止所考虑的选项:
支撑扩展,即file{1..3}
,不允许变量结束。换句话说,file{1..$N}
不起作用。
范围表达式可用于匹配数字字符。它允许变量结束,即file[1-$N]
,但这仅适用于N> 9。
$(seq 1 $N)
可用于创建数字序列,但它没有帮助,因为问题是匹配文件名中的数字序列。如果文件名称只是1,2,3等,这将有效。
答案 0 :(得分:1)
这是另一种解决方案。我不是在鼓吹它,但是再次可以合法地使用eval
;)...而且我认为不能在范围内使用变量是一个烦人/不太直观的缺点。
N=5
eval echo {1..$N}
所以你可以做到
eval ls file{1..$N}
答案 1 :(得分:0)
我找到了使用扩展globs的解决方案。需要使用shopt -s extglob
命令启用它们。 @(...)
可用于匹配由|分隔的任何一组模式字符,例如file@(1|2|3)
。现在我只需要用|来生成数字序列作为分隔符而不是换行符:
shopt -s extglob
range=$(seq 1 $N)
ls file@(${range//$'\n'/|})
答案 2 :(得分:0)
你能做到吗,
for file01.txt, file02.txt, file345.txt, file678.txt...
cat file*.txt > file_all.txt
还是我错过了这一点?