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

Bash 如何将printf语句的结果分配给变量(前导零)?,bash,shell,printf,Bash,Shell,Printf,我正在编写一个shell脚本(MacOSX上的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看起来是正

我正在编写一个shell脚本(MacOSX上的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
我记得在某个地方读到,
$[]
已被弃用。改用
$(())