【发布时间】:2018-04-23 16:03:12
【问题描述】:
我有一个要通过 for 循环的文件列表。他们被命名
FA2_00032.png, FA2_00033.png, etc
我有变量 $imID 包含 FA2 字符串,$startFrame 包含开始帧(例如 00034)和 $endFrame 包含结束帧(例如 00894)。
我已经设法使用以下方法获取相关文件的列表:
eval echo ${imageID}_{${startFrame}..${endFrame}}.png;
这个输出
FA2_00034 FA2_00035 FA2_00036 等
但现在我需要将它传递给 for 循环。也就是说,
for file in *the above list*
其中*上面的列表*是上面的块引用列表。 $file 应包含 FA2_00034、FA2_00035 等,以便在 for 循环中使用。
【问题讨论】:
-
顺便说一句,这是BashPitfalls #33
-
当心,链接副本中有一些错误的答案。
-
@CharlesDuffy, @chepner:你觉得用
xargs做这个怎么样? (例如seq ${startFrame} ${endFrame} | xargs -I {} printf "%s_%05d.png\\n" ${imageID} {})。似乎是不使用循环的好方法。 -
@l'L'l,
seq既不是 bash 的一部分,也不是 POSIX 规范的一部分。当它存在时,它不保证可用,也不保证有任何特定的行为。并且xargs printf,使用/usr/bin/printf,比使用printfshell 内置的要贵得多。 -
@CharlesDuffy:有趣的是,我没有意识到
xargs实际上是在使用它自己的printf— 一如既往地感谢您的回复/建议/提示!