我想编写一个递归重命名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 ‘
' 在双引号内保留其特殊含义