我想写一个脚本,递归地重命名DJVU文件的页面。
http://djvu.sourceforge.net/doc/man/djvused.html中,我知道在单个页面上执行此操作的命令(比如名称为6的bundle的调用页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的小知识有关。
有人能告诉我如何修改它,使它工作吗?

最佳答案

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

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 ‘”在双引号中保留其特殊含义

09-04 01:26