我正在编写一个shell脚本(在Mac OS X上为Bash)来重命名一堆图像文件。我希望结果是:

frame_001
frame_002
frame_003

等等。

这是我的代码:
let framenr=$[1 + (y * cols * resolutions) + (x * resolutions) + res]
echo $framenr:
let framename=$(printf 'frame_%03d' $framenr)
echo $framename
$framenr看起来正确,但是$framename始终变为0。为什么?

最佳答案

let命令强制进行算术评估,并且所引用的“变量”不存在,因此您将获得默认值0。

y=5
x=y; echo $x        # prints: y
let x=y; echo $x    # prints: 5

改为执行以下操作:
framenr=$(( 1 + (y * cols * resolutions) + (x * resolutions) + res ))
echo $framenr:

# if your bash version is recent enough
printf -v framename 'frame_%03d' $framenr
# otherwise
framename=$(printf 'frame_%03d' $framenr)

echo $framename

我记得曾在某处阅读过不推荐使用$[ ]的内容。请改用$(( ))

关于bash - 如何将printf语句的结果分配给变量(前导零)?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18948594/

10-09 08:32