在Bash脚本中将一系列文件名与变量end匹配

时间:2014-01-30 12:11:15

标签: bash

假设我有许多名为file1,file2,file3等的文件。我正在尝试找到一种方法来匹配前N个文件,在Bash脚本中,其中N是一个变量。以下是我到目前为止所考虑的选项:

  • 支撑扩展,即file{1..3},不允许变量结束。换句话说,file{1..$N}不起作用。

  • 范围表达式可用于匹配数字字符。它允许变量结束,即file[1-$N],但这仅适用于N> 9。

  • $(seq 1 $N)可用于创建数字序列,但它没有帮助,因为问题是匹配文件名中的数字序列。如果文件名称只是1,2,3等,这将有效。

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

还是我错过了这一点?