首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Bash -使用参数作为循环参数

Bash -使用参数作为循环参数
EN

Stack Overflow用户
提问于 2015-05-26 03:07:49
回答 1查看 85关注 0票数 0

我试图使用bash将多个目录中的多个图像缝合到一个视频中。下面的脚本起作用。

代码语言:javascript
复制
for f in {0..289}; do convert +append Viewer/$f.png Timeline_Board/$f.png Leaderboard/$f.png Montage/montage$f.png; done
cd Montage
ffmpeg -f image2 -r 7 -i montage%d.png -vcodec libx264 -crf 22 montage.mkv

这个循环通过帧0.png到289 and,并像预期的那样将组件拼接在一起。然而,我并不总是知道我将转换多少帧。我想要做的是用这样的行文:

代码语言:javascript
复制
for f in {0..$1}; do convert +append Viewer/$f.png Timeline_Board/$f.png Leaderboard/$f.png Montage/montage$f.png; done

在这里,我可以传递一个命令行参数来准确选择我想要的帧数。但是,当我的脚本中有这一行并运行./convert_images 289时,我会看到一个错误:convert: unable to open image 'Viewer/{0..289}.png': No such file or directory @ error/blob.c/OpenBlob/2675.

看起来bash并没有将我传入的整数解释为循环的参数。我如何使bash将变量视为一个循环到的数字?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-26 03:09:47

如果您的shell是bash,请使用C样式的for循环:

代码语言:javascript
复制
for ((f=0; f<289; f++)); do
  ...
done

为了解释它的原因--支撑展开发生在参数展开之前,所以当它发生时,变量的值是不可用的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30448808

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档