我想编写一个脚本,以递归方式重命名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的小知识有关。
有人能告诉我如何修改它以便它起作用吗?
答案 0 :(得分:2)
你应该用双引号正确引用它。使用单引号不允许扩展变量并保持字面形式。
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 ‘
”在双引号中保留其特殊含义