使用 djvused 程序的 Linux shell 脚本不起作用



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

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 的小知识有关。

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

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

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

如单引号所述:

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

而在双引号上:

将字符括在双引号 ('"') 中可保留文本 引号内所有字符的值,"$"除外, ' ’, ‘’, and, when history expansion is enabled, ‘!’. The characters ‘$’ and ‘ ' 在双引号内保留其特殊含义

最新更新