将顺序列表传递给 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_00034
、FA2_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
我有一个文件列表要通过 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_00034
、FA2_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