0

我想编写一个脚本,以递归方式重命名 DJVU 文件的页面。从http://djvu.sourceforge.net/doc/man/djvused.html我知道在单个页面上执行此操作的命令(例如调用名称为 6 的捆绑包的第 5 页)是

djvused file.djvu -e 'select 5; set-page-title 6; save'

但是后来我在尝试递归执行时遇到了麻烦,即运行脚本

./for.sh

这是由

for (( i=12; i<=823; i++ ))
do
 djvused file.djvu -e 'select $i; set-page-title $((i-10)); save'
done

我得到的错误是由于程序无法将 $i 理解为数字而不是表达式。我想这与我对shell脚本和djvused的小知识有关。

谁能告诉我如何修改它以使其正常工作?

4

1 回答 1

2

您应该用双引号正确引用它。使用单引号将不允许变量被扩展并保持为文字形式。

for (( i=12; i<=823; i++ ))
do
 djvused file.djvu -e "select $i; set-page-title $((i-10)); save"
done

如单引号所述:

将字符括在单引号 (''') 中会保留引号内每个字符的文字值。单引号之间不能出现单引号,即使前面有反斜杠。

而在双引号中:

将字符括在双引号 ('"') 中会保留引号内所有字符的字面值,但 '$'、'<code>'、'\' 以及启用历史扩展时的'!' 除外. 字符 '$' 和 '</code>' 在双引号中保留其特殊含义

于 2013-09-19T15:37:26.147 回答