将顺序列表传递给 for 循环

Passing sequential list to for loop

我有一个文件列表要通过 for 循环。他们被命名为

FA2_00032.png, FA2_00033.png, etc

我有包含 FA2 字符串的变量 $imID,包含起始帧(例如 00034)的 $startFrame 和包含结束帧(例如 00894)的 $endFrame

我已经设法使用以下方法获取了相关文件的列表:

eval echo ${imageID}_{${startFrame}..${endFrame}}.png;

这输出

FA2_00034 FA2_00035 FA2_00036 etc

但现在我需要将其传递给 for 循环。也就是说,

for file in *the above list*

其中*上面的列表*是上面的块引用列表。 $file 应包含 FA2_00034FA2_00035 等用于 for 循环。

对于这样的任务,使用 C 风格的 for 循环,而不是 eval+{...}printf可用于assemble文件名从当前整数。语法 10#$foo 确保 $foo 的值在包含前导 0 的情况下被视为十进制(而非八进制)数字。

imageID=FA2
startFrame=00034
endFrame=00894

for ((i=10#startFrame; i<=10#$endFrame; i++)); do
    printf -v file '%s_%05d.png' "$imageID" "$i"
    echo "Operating on $file" >&2
done