我想写一个脚本,递归地重命名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 ‘
”在双引号中保留其特殊含义