linux shell脚本使用djvused程序无法正常工作

时间:2013-09-19 15:35:48

标签: linux bash shell djvu

我想编写一个脚本,以递归方式重命名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的小知识有关。

有人能告诉我如何修改它以便它起作用吗?

1 个答案:

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