9

我正在编写一个 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. 为什么?

4

1 回答 1

14

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

我记得在某个$[ ]已弃用的地方阅读过。改为使用$(( ))

于 2013-09-22T20:51:56.750 回答