0

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 を式ではなく数値として理解できないことが原因です。これは、シェル スクリプトと djvused に関する私の小さな知識に関連していると思います。

動作するように変更する方法を誰か教えてもらえますか?

4

1 に答える 1

2

二重引用符で適切に引用する必要があります。一重引用符を使用すると、変数を展開できず、リテラル形式のままになります。

for (( i=12; i<=823; i++ ))
do
 djvused file.djvu -e "select $i; set-page-title $((i-10)); save"
done

一重引用符について述べたように:

文字を一重引用符 (''') で囲むと、引用符内の各文字のリテラル値が保持されます。バックスラッシュが前にある場合でも、単一引用符の間に単一引用符が出現しない場合があります。

一方、二重引用符の場合:

文字を二重引用符 ('"') で囲むと、引用符内のすべての文字のリテラル値が保持されます。 . 文字 '$' および '</code>' は、二重引用符内で特別な意味を保持します

于 2013-09-19T15:37:26.147 に答える