假设我有许多名为file1,file2,file3等的文件。我正在尝试找到一种匹配第一个n文件的方法,在bash脚本中,n是一个变量。这是我到目前为止考虑的选项:
-
支撑扩展,即
file{1..3}
,不允许变量结束。换句话说,file{1..$N}
不起作用。 -
范围表达式可用于匹配数字字符。它允许变量末端,即
file[1-$N]
,但这仅在n>9。
之前起作用 $(seq 1 $N)
可用于创建一个数字序列,但由于问题是匹配文件名中的数字序列,因此无济于事。文件名是简单的1、2、3,等等,这将起作用。
这是另一个解决方案。我不是在提倡它,但是再次可以使用eval
的合法用途;
N=5
eval echo {1..$N}
所以你可以做
eval ls file{1..$N}
我找到了使用扩展地球的解决方案。他们需要使用shopt -s extglob
命令启用它们。@(...)
可用于匹配由|分开的任何一组模式。角色,例如file@(1|2|3)
。现在,我只需要用|生成数字序列作为分离器角色而不是新线:
shopt -s extglob
range=$(seq 1 $N)
ls file@(${range//$'n'/|})
您可以简单地做
for file01.txt, file02.txt, file345.txt, file678.txt...
cat file*.txt > file_all.txt
还是我错过了点?