如何将printf语句的结果分配给变量(对于前导零)?

Tom*_*und 5 bash shell printf

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

frame_001
frame_002
frame_003
Run Code Online (Sandbox Code Playgroud)

等等

这是我的代码:

let framenr=$[1 + (y * cols * resolutions) + (x * resolutions) + res]
echo $framenr:
let framename=$(printf 'frame_%03d' $framenr)
echo $framename
Run Code Online (Sandbox Code Playgroud)

$framenr看起来是正确的,但$framename总是成为0.为什么?

gle*_*man 9

let命令强制算术计算,并且引用的"变量"不存在,因此您将获得默认值0.

y=5
x=y; echo $x        # prints: y
let x=y; echo $x    # prints: 5
Run Code Online (Sandbox Code Playgroud)

改为:

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
Run Code Online (Sandbox Code Playgroud)

我记得读过某个$[ ]被弃用的地方.请$(( ))改用.