我正在编写一个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
。为什么呢?
答案 0 :(得分:9)
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
我记得在某个地方读过$[ ]
已弃用。请改用$(( ))
。