我正在编写一个bash脚本来从源代码下载BUNCH数据文件。数据文件都有文件名的数字部分来标识它们的段,如下所示:Filename_blahblah_000000或Filename_blahblah_000024等。
我想打开多个线程,所以我可以并行拉出这些段(大约有4200个)。
这是我的问题:有没有办法可以传递我可以在for循环中调用的输入参数?示例代码如下。
这里的代码是"蛮力"格式。这个特殊的例子将提取3个文件:文件000000,文件000001和文件000002,如下所示:
sr/bin/env bash
(initial non-related stuff)
for i in {0..2}
do
filenum="00000$i"
...blahblahblah
done
结果如下:
% ./data_download-19-x.sh <-- This is the code entered into the command line
Downloading file /blah/file_000000...
(stuff happens)
Downloading file /blah/file_000001...
(stuff happens)
Downloading file /blah/file_000002...
(stuff happens) (done, everybody happy)
但是,我希望能够传入开始和结束参数,所以代码现在看起来像这样:
#!/usr/bin/env bash
(initial non-related stuff)
start=$1
end=$2
for i in {@start..@end} <-- I KNOW THIS IS WHERE THE WRONGNESS IS
do
filenum="00000$i"
...blahblahblah
done
除此之外,最终结果如下:
% ./data_download-19-x.sh 0 2 <-- Notice the 2 input parameters
Downloading file /blah/file{0..2}
Error: Program failed.
Exception: File not found
它将迭代参数解释为文字字符串{0..2},而不是将$ start和$ end作为数字处理。
所以有一种偷偷摸摸的方式让bash将$ start和$ end的值解释为for循环的边界,或者我必须制作一堆不同的文件,并将边界硬编码到其中并执行他们那样?